Mysql 选择不带';不在映射表中出现
我有三张桌子:Mysql 选择不带';不在映射表中出现,mysql,sql,Mysql,Sql,我有三张桌子: ================ | contacts | ================ | id | name | ================ ================ | contact_map | ================ | cid | lid | ================ ================ | contact_list | ================ | id | name | ==
================
| contacts |
================
| id | name |
================
================
| contact_map |
================
| cid | lid |
================
================
| contact_list |
================
| id | name |
================
我需要找到所有未分配到列表的联系人<代码>联系人地图中的cid是联系人地图中的id
和联系人地图中的lid
是联系人列表中的id
选择带有lid
的联系人相对容易,但我不知道如何选择没有lid
的联系人
有什么帮助吗?您可以使用
不存在或不在中:
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
);
您可以使用不存在
或不存在
:
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
);
我认为您实际上不需要使用联系人列表
表,因为联系人映射
表允许您确定哪些联系人已添加到列表中。作为Gordon回答的替代方法,您可以将联系人
表左连接到联系人映射
,并保留任何未映射到任何内容的记录
SELECT c.*
FROM contacts c LEFT JOIN contact_map cm
ON c.id = cm.cid
WHERE cm.cid IS NULL
我认为您实际上不需要使用联系人列表
表,因为联系人映射
表允许您确定哪些联系人已添加到列表中。作为Gordon回答的替代方法,您可以将联系人
表左连接到联系人映射
,并保留任何未映射到任何内容的记录
SELECT c.*
FROM contacts c LEFT JOIN contact_map cm
ON c.id = cm.cid
WHERE cm.cid IS NULL
这种类型的查询称为什么?带子查询的查询?它有具体的名字吗?谢谢你的回答,will test Now这些是where
子句中相关子查询的示例。这种类型的查询叫什么?带子查询的查询?它有具体的名字吗?谢谢你的回答,威尔现在测试这些是where
子句中相关子查询的示例。谢谢你的回答。我也来看看谢谢你的回答。我也来看看