Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择不带';不在映射表中出现_Mysql_Sql - Fatal编程技术网

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
子句中相关子查询的示例。谢谢你的回答。我也来看看谢谢你的回答。我也来看看