有人可以帮助我理解这个SQL代码吗? 这实际上让我更加困惑 - END = G.CODE
SELECT something, something
FROM ABCD A
JOIN GHIJ G ON
CASE
WHEN A.CODE = 'not available' THEN 'NA_CODE'
ELSE A.CODE END = G.CODE
LEFT JOIN PRODUCT P ON P.ID = A.ID
WHERE P.ID IS NULL;
GO
由于 伊莎
答案 0 :(得分:3)
当您查看格式正确的代码时,您将理解它。
CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END = G.CODE
考虑像
这样的连接子句 B.XYZ = G.CODE
其中B.XYZ
是一个案例陈述,用于操纵加入列A.CODE
以获取值'不可用'到'NA_CODE'
,以便它可以匹配G.CODE
中的相同值。
除了价值'不可用'一切都很好,所以案例陈述只能操纵“不可用”。到'NA_CODE'
,以便join子句可以将其与G.CODE
内的值匹配。
查找案例陈述以了解更多详情。
希望你理解。这里: -
B.XYZ =[CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END]
答案 1 :(得分:1)
您需要在此查询中了解更多内容。
对于“CASE ... END = G.CODE”你得到了一个很好的答案 - 事实上,“END”本身并不存在,它是CASE表达式语法中的最后一个关键词。
如果不这样做,请注意您的查询将不返回任何行。这是因为最后你有
...LEFT JOIN PRODUCT P ON P.ID = A.ID
WHERE P.ID IS NULL
LEFT JOIN中不返回P.ID为“IS NULL”的行 - 仅返回P.ID = A.ID的行和A.ID为NULL的行。 (当P.ID为NULL时,与A.ID的等式是UNKNOWN,因此不返回该行。)