[英]Why can LEFT OUTER JOIN fail to work?
我有以下查询
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
是否保证左表中的所有行都应显示?
UPDATE
抱歉,当然在 tagLists
实际上没有空连接的行。
更新2
抱歉,我是个傻瓜:确实有很多我不关心的非空行...
查询不返回任何数据的唯一情况是,当Samples
每一行在TagLists
都有对应的行满足连接条件时,所有此类行在ProjectID
字段中都具有非NULL值。 换句话说,每个样本都有一个类型为6的标签列表项。
测试此问题的好方法是删除WHERE
子句,并验证所有628行返回有效的ProjectID
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.