我有 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)
| 归档时间: |
|
| 查看次数: |
103019 次 |
| 最近记录: |