仅当子表中的所有记录都具有值时,单个 sql 查询才能从父表中选择一条记录

Har*_*run 8 sql-server

我有 Table1 和 Table2,Table1 的 PK 是 Table2 的 FK。现在,当且仅当与 Table1 记录对应的 Table2 中的所有记录都有值时(如果任何字段值为空,则跳过),我需要从 Table1 中执行选择

即,对于表 1 中的 id,表 2 中有多个子 id。在这些多个 id 中,如果某个特定字段对应于任何一个 id 为空,则应该跳过 select。

任何人请帮我为这个要求写一个 sql 查询。

ype*_*eᵀᴹ 11

这称为“反联接”(或反半联接)。在 SQL 中编写它的一种方法是使用NOT EXISTS构造:

SELECT t1.*
FROM Table1 AS t1
WHERE NOT EXISTS
      ( SELECT *
        FROM Table2 AS t2
        WHERE t2.FKcolumn = t1.PKcolumn
          AND t2.columnX IS NULL
      ) 
Run Code Online (Sandbox Code Playgroud)

如果 - 作为您的评论 - 您想要一个与任何子行(在 Table2 中)无关的父行(在 Table1 中),不显示,添加这个(如果您还想要显示第二个表中的列,则加入 Table2):

  AND EXISTS
      ( SELECT *
        FROM Table2 AS t2
        WHERE t2.FKcolumn = t1.PKcolumn
      ) 
Run Code Online (Sandbox Code Playgroud)