【问题标题】:exists and no exists mysql存在和不存在mysql
【发布时间】:2020-06-09 02:50:37
【问题描述】:

我有这样的数据假人

CREATE TABLE A  ( users_id INT);
INSERT INTO A  VALUES (1), (2), (3), (4);
CREATE TABLE B (users_id INT);
INSERT INTO B VALUES (2), (3), (4), (5);
CREATE TABLE C (users_id INT);
INSERT INTO C VALUES (3), (4), (5), (6);
CREATE TABLE D (users_id INT);
INSERT INTO D VALUES (4), (5), (6), (7);

我想选择表 D 和 B 上存在但表 A 上不存在的 users_id

我试过这个查询

SELECT DISTINCT b1.users_Id FROM b b1
      WHERE EXISTS (SELECT d1.users_Id FROM D d1
                WHERE b1.users_id = d1.users_id)
       AND NO EXISTS (SELECT a1.users_id from A a1
                      WHERE a1.users_id = d1.users_id
                      and a1.users_id = b1.users_id
                      and b1.users_id = d1.users_id);

但是mysql说

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS (SELECT a1.users_id from A a1 WHERE a1.users_id = d' at line 4

这是小提琴http://sqlfiddle.com/#!9/2bff8e/10

【问题讨论】:

  • Sql 说话正常,所以用“NOT”代替“NO”:-)

标签: mysql mysql-select-db


【解决方案1】:

同一查询的替代形式:

SELECT DISTINCT b.users_Id
FROM b
JOIN d
  ON b.users_id = d.users_id
LEFT JOIN a
  ON b.users_id = a.users_id
WHERE a.users_id IS NULL

【讨论】:

  • 非常感谢先生,这正是我需要的,祝您有美好的一天。
猜你喜欢
  • 2018-09-17
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多