Sql自联接哪里不存在?

use*_*010 1 sql t-sql join

我有一个类似于以下的表格:

name    | language | text  
-----------------------------
greet   | 1        | hello
greet   | 2        | bonjour
blue    | 1        | blue
blue    | 2        | bleu 
red     | 1        | red
green   | 1        | green
yellow  | 1        | yellow
Run Code Online (Sandbox Code Playgroud)

我需要检索仅存在于语言编号1的所有记录,因此在上面的示例中,我应该只有一个包含红色,绿色和黄色的列表.我真的不太了解sql连接,所以不确定最好的方法是什么?任何帮助,将不胜感激

Tim*_*ter 5

用途NOT EXISTS:

SELECT t.*
FROM dbo.TableName t
WHERE t.language = 1
AND NOT EXISTS
(
   SELECT 1 FROM dbo.TableName t2
   WHERE t.name = t2.name
   AND ( t2.language IS NULL OR t2.language <> 1 )
)
Run Code Online (Sandbox Code Playgroud)

DEMO

我已经包含t2.language IS NULL了向您展示如何处理NULL-values,如果它只是您需要的非空列t2.language <> 1.这是最可读和最有效的方法,没有NULL值的问题.还有其他人.