我有3张桌子:
================
| contacts |
================
| id | name |
================
================
| contact_map |
================
| cid | lid |
================
================
| contact_list |
================
| id | name |
================
我需要找到所有未分配给列表的联系人。
cid
中的contact_map
是id
中的contacts
,lid
中的contact_map
是id
中的contact_list
。选择带有
lid
的联系人相对容易,但是我不知道如何选择没有lid
的联系人。有什么帮助吗?
最佳答案
您可以使用not exists
或not in
:
select c.*
from contacts c
where not exists (select 1
from contact_map cm
where cm.cid = c.id
);
如果您不希望将联系人分配给特定列表,则只需将该信息包括在子查询中:
select c.*
from contacts c
where not exists (select 1
from contact_map cm
where cm.cid = c.id and cm.lid = $lid
);