Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 显示ID不存在的列表_Mysql_Sql - Fatal编程技术网

Mysql 显示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

我有两张桌子

首先是 主控位置:

此表由列(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 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