为什么 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.