嵌套即可以写在select子句中,也可以写在from子句中。下面以SQL Entity为例来说明:
1. 嵌套在select中,以父表为主在select中嵌套子表信息。
SELECT c.Title, ANYELEMENT(SELECT oa.FirstName, oa.LastName, oa.Street1, oa.City, oa.StateProvince
FROM SampleEntities.vOfficeAddresses as oa
WHERE c.ContactID=oa.ContactID)
FROM SampleEntities.Contacts as c
Where c.FirstName='Robert'
这种情况下一般要用ANYELEMENT函数。此种情况实际意义不大,只是列在这里表示可以这么写。
2. 嵌套在select中,以子表为主在select中嵌套父表信息。
SELECT TRIM(oa.FirstName), oa.LastName,
ANYELEMENT(SELECT VALUE c.Title
FROM SampleEntities.Contacts as c
WHERE c.ContactID=oa.ContactID),
oa.Street1, oa.City, oa.StateProvince
FROM SampleEntities.vOfficeAddresses as oa
这种情况下是有意义的。目的是获取一些父表中的信息。最主要的问题是无法根据父表来过滤。例如选择Contact.FirstName='Robert'用这种方法就不能实现。
3.Join
SELECT c.Title,oa.FirstName, oa.LastName,
oa.Street1, oa.City, oa.StateProvince
FROM PEF.Contacts as c
JOIN PEF.vOfficeAddresses as oa
ON c.ContactID = oa.ContactID
Where c.FirstName='Robert'
这种方式灵活。因为join之后得到一张表,可以在这张表上进行where操作。
4. From子句中的嵌套
SELECT TRIM(oa.FirstName), oa.LastName
FROM (SELECT VALUE oa
FROM PEF.vOfficeAddresses AS oa
WHERE oa.StateProvince='Ontario')
AS oa
这种方式很容易理解。from子句需要一个表,所以可以嵌套一个select子句。