为什么 LEFT OUTER JOIN 会失效?
Why can LEFT OUTER JOIN fail to work?
我有以下查询
SELECT COUNT(*) FROM Samples
return 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
return空table.
也就是说外连接查询
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
不保证左起 table 的所有行都应该出现吗?
更新
抱歉,当然 tagLists
.
中实际上没有非空连接行
更新 2
抱歉,伙计们,我是个傻瓜:确实存在我不关心的非空行...
您的查询 return 没有数据的唯一情况是 Samples
的每一行在 TagLists
中都有对应的行满足连接条件,所有这些行都没有- ProjectID
字段中的 NULL 值。也就是说,每个样本都有一个类型为6的标签列表项。
测试这个的一个好方法是删除 WHERE
子句,并验证所有 628 行 returned 一个有效的 ProjectID
.
我有以下查询
SELECT COUNT(*) FROM Samples
return 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
return空table.
也就是说外连接查询
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
不保证左起 table 的所有行都应该出现吗?
更新
抱歉,当然 tagLists
.
更新 2
抱歉,伙计们,我是个傻瓜:确实存在我不关心的非空行...
您的查询 return 没有数据的唯一情况是 Samples
的每一行在 TagLists
中都有对应的行满足连接条件,所有这些行都没有- ProjectID
字段中的 NULL 值。也就是说,每个样本都有一个类型为6的标签列表项。
测试这个的一个好方法是删除 WHERE
子句,并验证所有 628 行 returned 一个有效的 ProjectID
.