如何排除不与另一个表连接的行?

Cha*_*eus 70 sql join

我有两个表,一个有主键,另一个有外键.

我想从主表中提取数据,只有当辅助表没有包含它的密钥的条目时.与简单内部联接相反的排序,仅返回通过该键连接在一起的行.

Pra*_*ana 232

替代文字

SELECT <select_list> 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
Run Code Online (Sandbox Code Playgroud)

加入的完整形象 替代文字

来自aticle:http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx

  • 最后!为什么他们没有这些在教科书中,为什么我在大学的讲师没有这些?!他们使用了世界上最糟糕的解释,而不是远离这些解释! (5认同)
  • 这是黄金。我讨厌写一个没有内容但热情洋溢的赞美的评论,但是来吧!这是一个很棒的答案。谢谢你,@Pranay Rana。 (5认同)

gbn*_*gbn 7

SELECT
   *
FROM
   primarytable P
WHERE
   NOT EXISTS (SELECT * FROM secondarytable S
     WHERE
         P.PKCol = S.FKCol)
Run Code Online (Sandbox Code Playgroud)

一般来说,(NOT) EXISTS是一个更好的选择,然后(NOT) IN或(LEFT) JOIN


The*_*ter 5

使用“不存在”左连接:

SELECT p.*
FROM primary_table p LEFT JOIN second s ON p.ID = s.ID
WHERE s.ID IS NULL
Run Code Online (Sandbox Code Playgroud)