用于选择未引用行的SQL查询

use*_*167 4 mysql sql

我有一个脑死亡的时刻......我有两个表格描述:

CREATE TABLE table_a (
    id             INTEGER          PRIMARY KEY AUTO_INCREMENT,
    name           VARCHAR(255)     NOT NULL
    UNIQUE (name))

CREATE TABLE table_b (
    id             INTEGER          PRIMARY KEY AUTO_INCREMENT,
    a_key          INTEGER          NOT NULL,
    other_stuff    VARCHAR(255)     NOT NULL,
    FOREIGN KEY(a_key)  REFERENCES table_a(id)
         ON DELETE CASCADE)
Run Code Online (Sandbox Code Playgroud)

如何从table_a中选择table_b.a_key中没有条目的所有行?

Luk*_*keH 11

SELECT table_a.*
FROM table_a
    LEFT JOIN table_b
        ON table_a.id = table_b.a_key
WHERE table_b.id IS NULL
Run Code Online (Sandbox Code Playgroud)


Wel*_*bog 4

天真地,您可以使用 NOT EXISTS 子查询:

SELECT A.*
FROM table_a A
WHERE NOT EXISTS (
  SELECT 1
  FROM table_b B
  WHERE B.a_key = A.id
)
Run Code Online (Sandbox Code Playgroud)

您也可以尝试外连接。但他们通常会在内部优化相同的查询。