Search code examples
mysqlmysql-select-db

exists and no exists mysql


i have data dummy like this

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);

i want to selected users_id where exists on table D and B but NOT EXISTS on table A

i tried this query

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);

but the mysql said

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

here's the fiddle http://sqlfiddle.com/#!9/2bff8e/10


Solution

  • Alternate form of same query:

    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