选择相关表中没有值的记录的所有行

时间:2018-09-12 10:02:11

标签: sql sql-server

我有桌子:

人员表

ID  NAME
1   Matt
2   Josh

文件表

FILE_ID     PERSON_ID   TYPE
1           1           Photo
2           2           Text
3           2           Text

我想返回所有其他人,这些人在另一张桌子中没有任何具有照片类型的文件。

在上述情况下,我想返回:

ID  NAME
2   Josh

最有效的方法是什么?

3 个答案:

答案 0 :(得分:4)

我会使用Sequence <- str_replace_all(SequenceRaw, "(?m)^>[A-Z]{2}\\d{6}\\.?\\d\\h+([a-zA-Z]+(?:-[a-zA-Z]+)?)\\h+([a-zA-Z]+(?:-[a-zA-Z]+)?).*", "\\1 \\2")

not exists

为了提高性能,您希望在select p.* from person p where not exists (select 1 from files f where f.person_id = p.id and f.type = 'Photo' ); 上建立索引。

答案 1 :(得分:2)

我会使用not exists

select p.*
from person p
where not exists (select 1 from files f where f.person_id = p.id and f.type = 'photo');

答案 2 :(得分:2)

使用not in

select p.*
from person p
where p.id not in (select id from Files f where f.type = 'photo');