我有3张桌子:

================
| contacts     |
================
| id | name    |
================

================
| contact_map  |
================
| cid | lid    |
================

================
| contact_list |
================
| id | name    |
================


我需要找到所有未分配给列表的联系人。 cid中的contact_mapid中的contactslid中的contact_mapid中的contact_list

选择带有lid的联系人相对容易,但是我不知道如何选择没有lid的联系人。

有什么帮助吗?

最佳答案

您可以使用not existsnot 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
                 );

10-05 19:25