我有以下查询
SELECT COUNT(*) FROM Samples
归还628
。
而下面的查询
SELECT * FROM
(
SELECT
sa.*,
tagLists.tagNames AS tagNames,
tagLists.ProjectID AS ProjectID
FROM Samples sa
LEFT OUTER JOIN TagLists tagLists
ON sa.spotID = tagLists.taggedItemID
AND 6 = tagLists.taggedItemType
) ex
WHERE ex.ProjectID IS NULL
返回空表。
换句话说,外部联接查询
SELECT
sa.*,
tagLists.tagNames AS tagNames,
tagLists.ProjectID AS ProjectID
FROM Samples sa
LEFT OUTER JOIN TagLists tagLists
ON sa.spotID = tagLists.taggedItemID
AND 6 = tagLists.taggedItemType
不包含任何ProjectID
为null的行。
为什么?不LEFT OUTER JOIN
保证左表中的所有行都应显示吗?
更新
抱歉,当然在中没有不为空的联接行tagLists
。
更新2
抱歉,我是个傻瓜:确实有很多我不关心的非空行...
查询不返回任何数据的唯一情况是,其中的每一行Samples
都有一个TagLists
满足联接条件的对应行,而所有此类行的ProjectID
字段中都具有非NULL值。换句话说,每个样本都有一个类型为6的标签列表项。
测试此问题的一个好方法是删除该WHERE
子句,并验证所有628行返回有效值ProjectID
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句