Mysql 显示ID不存在的列表
我有两张桌子 首先是 主控位置: 此表由列(id、位置)组成Mysql 显示ID不存在的列表,mysql,sql,Mysql,Sql,我有两张桌子 首先是 主控位置: 此表由列(id、位置)组成 第1行,id=1,位置=X 第2行,id=2,位置=Y 第3行,id=3,位置=Z 二是 用户访问权限 列(电子邮件、id) 第1行=>me@localhost.host,1 我想显示主位置的所有其他位置,其中包含“电子邮件”me@localhost“他不在场 我已经设置了sql: SELECT ml.idms_location, ml.location FROM ms_location ml JOIN user_access
- 第1行,id=1,位置=X
- 第2行,id=2,位置=Y
- 第3行,id=3,位置=Z
SELECT ml.idms_location, ml.location
FROM ms_location ml JOIN user_access tu
WHERE ml.id= tu.id
AND !(tu.email = 'me@localhost.host');
但它只显示从表user_访问的电子邮件不存在的位置me@localhost.host
是否有类似SELECTALL EXCEPT的sql语法
谢谢
更新
表1:主位置
表2:tm_访问
我已经按照建议编写了语法结果:
SELECT DISTINCT ml.idms_location,ml.location
FROM ms_location ml
LEFT OUTER JOIN tm_userlocation tu
ON ml.idms_location = tu.idms_location
WHERE COALESCE(tu.email,'john@mscid.com') = 'john@mscid.com';
结果
使用此SQL语法:
SELECT ms.idms_location, ms.location
FROM ms_location AS ms LEFT JOIN tm_userlocation AS tu
ON ms.idms_location = tu.idms_location
WHERE tu.email !='john@mscid.com' OR tu.email IS NULL;
我执行的结果只是缺少第一个ID,3号和5号也应该删除
截图:
下面的语句将返回
ms\u location
中在user\u access
中没有对应行的所有行
SELECT ml.idms_location,ml.location
FROM master_location ml
WHERE NOT EXISTS (
SELECT *
FROM user_access tu
WHERE tu.idms_location = ml.idms_location
AND tu.email = 'john@mscid.com'
)
您还有一点有待猜测(我假设您的基数为1..*),但我认为您需要的是一个结果集,显示没有与电子邮件地址关联的用户访问记录的ms\u位置记录me@localhost.host'. 也就是说,从给定的示例数据来看,只有位置X具有与该电子邮件地址相关联的用户访问记录(它也是唯一的记录)。位置Y和Z没有与指定地址关联的用户访问记录。这些是你想要的 如果我对您的理解正确,请尝试以下方法:
SELECT ml.idms_location, ml.location
FROM ms_location ml
WHERE ml.id NOT IN (
SELECT id FROM user_access WHERE email = 'me@localhost.host')
如果没有,请不要。根据您的数据,您的查询应该是
select m.`id`, m.`location` from `master_location` as m
WHERE
m.`id` NOT IN ( select `id` from `user_access` WHERE `email` = 'john@mscid.com' ) ;
检查SQL FIDLE链接
语法将生成所有显示的数据。请查看更新。我已尝试使用您的语法,但结果与“使用此SQL语法”的新更新相同,只是第一行已消失,其他两行仍在该行中(第3行和第5行)。第3排和第5排也应该消失。@randytan-看来我们都误解了你的要求。我添加了一个提琴,它应该会返回结果,因为我现在认为你期待它们。请注意,为便于将来参考,我建议立即在您的问题中添加预期输入和输出,以防止误解。我已添加了新的更新。如果user_access中只有一个值,则您的sql正在工作;如果有2个或3个值,则结果在我的计算机中不工作。@Randy可以根据您的数据查看sql演示以获取更新的sql