我有两张桌子,
首先是 master_location:
此表由列(id,location)
组成列(电子邮件,身份证)
第1行=> me@localhost.host,1
我想显示主电子邮件地址“me @ localhost”不存在的所有其他位置。
我已经设置了sql:
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_access中,其中的电子邮件不是me@localhost.host
有没有像SELECT ALL EXCEPT?
这样的SQL语法感谢
更新
表1:master_location
表格2:tm_access
我按照建议写了语法结果:
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也应该删除
截图:
答案 0 :(得分:2)
以下语句将返回ms_location
中user_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 :(得分:1)
你已经离开了一点猜测(我假设你的基数是1 .. *),但我认为你所要求的是一个结果集,显示ms_location记录没有关联的user_access记录,电子邮件地址为“me@localhost.host”。也就是说,根据您给定的示例数据,只有位置X具有与该电子邮件地址关联的user_access记录(它也是唯一的记录)。位置Y和Z没有与指定地址关联的user_access记录。这些是你想要的。
如果我正确地解释了你,试试这个:
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')
如果我没有,请不要。
答案 2 :(得分:0)
根据您的数据,您的查询应该是
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 Fiddle Link