繁体   English   中英

为什么LEFT OUTER JOIN无法工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM