我的表格如下:
name | language | text
-----------------------------
greet | 1 | hello
greet | 2 | bonjour
blue | 1 | blue
blue | 2 | bleu
red | 1 | red
green | 1 | green
yellow | 1 | yellow
我需要检索仅存在于语言编号1的所有记录,因此在上面的示例中,我应该只有一个包含红色,绿色和黄色的列表。我不太了解sql连接,所以不确定最好的方法是什么?任何帮助将不胜感激
答案 0 :(得分: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 )
)
我已经包含t2.language IS NULL
来向您展示如何处理NULL
- 值,如果它是非空列,则只需要t2.language <> 1
。
这是最可读和最有效的方法,没有NULL值的问题。有others。
答案 1 :(得分:1)
使用NOT IN
SELECT *
FROM TABLENAME
WHERE LANGUAGE = 1
AND NAME NOT IN
(
SELECT NAME FROM TABLENAME
WHERE LANGUAGE <> 1
)
答案 2 :(得分:1)
使用jion
SELECT t1.*
FROM TableName t1
left join TableName t2
on t2.name = t1.name
and t1.language = 1
and t2.language <> 1
where t2.name is null
答案 3 :(得分:-1)
您只需使用JOIN
关键字即可WHERE
。
SELECT * FROM translationTable WHERE language = 1