SQL Masters
我不理解此查询的一部分。在select语句中,看起来像独立的“ select语句”,几乎就像一个函数。此代码是供应商编写的Blackbaud CRM。作为独立代码,如代码在from子句中所见,代码中没有联接它们将它们带入数据集中的信息。最后一个奇怪的项目是,在别名为Spouse_id的列中,SPOUSE.RECIPROCALCONSTITUENTID列甚至不存在于所引用的表中。有BBCRM的人可以解释这一点吗?
谢谢
select
CONSTITUENT.ID,
CONSTITUENT.ISORGANIZATION,
CONSTITUENT.KEYNAME,
CONSTITUENT.FIRSTNAME,
CONSTITUENT.MIDDLENAME,
CONSTITUENT.MAIDENNAME,
CONSTITUENT.NICKNAME,
(select SPOUSE.RECIPROCALCONSTITUENTID
from dbo.RELATIONSHIP as SPOUSE
where SPOUSE.RELATIONSHIPCONSTITUENTID = CONSTITUENT.ID
and SPOUSE.ISSPOUSE = 1) as [SPOUSE_ID],
(select MARITALSTATUSCODE.DESCRIPTION
from dbo.MARITALSTATUSCODE
where MARITALSTATUSCODE.ID = CONSTITUENT.MARITALSTATUSCODEID) as [MARITALSTATUSCODEID_TRANSLATION]
From
dbo.constituent
left join
dbo.ORGANIZATIONDATA on ORGANIZATIONDATA.ID = CONSTITUENT.ID
where
(CONSTITUENT.ISCONSTITUENT = 1)
答案 0 :(得分:1)
这些是与相关的子查询。尽管没有显式的JOIN
,但是有一个指向外部表的链接,其行为类似于联接(尽管比显式的JOIN
更受约束):
(select SPOUSE.RECIPROCALCONSTITUENTID
from dbo.RELATIONSHIP as SPOUSE
where SPOUSE.RELATIONSHIPCONSTITUENTID = CONSTITUENT.ID AND
-------^ correlation clause connecting to outer table
SPOUSE.ISSPOUSE = 1
) as [SPOUSE_ID],
这就像LEFT JOIN
。如果没有行匹配,则结果为NULL
。
请注意,在这种情况下,相关子查询也是标量子查询。这意味着它只返回一列,最多返回一行。
如果查询返回的列不止一列,则会在查询中出现编译时错误。如果查询返回多行,则会在查询中出现运行时错误。