【发布时间】:2016-07-21 10:02:14
【问题描述】:
我有以下查询
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 为空的行。
为什么? LEFT OUTER JOIN 不保证左表中的所有行都应该出现吗?
更新
抱歉,tagLists 中当然没有非空连接行。
更新 2
对不起,我是个傻瓜:确实有非空行我不在乎......
【问题讨论】:
-
您没有向我们展示任何数据,使此评论具有推测性,但如果
Samples中的每条记录都与TagLists中的记录匹配,那么ex.ProjectID将永远不会是NULL,这将给出您当前的结果。