sql选择第二个表中没有关系的记录

Mar*_*tin 6 mysql sql

我试图在MySQL数据库中的phpMyAdmin中运行SQL查询,以获取在另一个表中没有相应记录的记录.

例如

**album**
id, name

**track**
id, album_id, name
Run Code Online (Sandbox Code Playgroud)

我需要所有没有相对曲目记录的专辑记录.

我试过了

SELECT album.id
from album 
WHERE album.id NOT IN (
  SELECT track.album_id 
  FROM track 
  WHERE 1
  GROUP BY track.album_id
)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这会导致MySQL服务崩溃

我也试过了

SELECT a.id FROM album a
INNER JOIN track t
ON a.id = t.album_id
WHERE t.id IS NULL
Run Code Online (Sandbox Code Playgroud)

但这不能按预期工作(不返回结果)

Jer*_*emy 15

您可以使用EXISTS检查相关表中是否缺少记录.

SELECT album.id
FROM album 
WHERE NOT EXISTS (
    SELECT *
    FROM track 
    WHERE track.album_id = album.id
);
Run Code Online (Sandbox Code Playgroud)

请参阅:http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

  • 如果您的目标是性能,则不存在不存在。它是性能杀手。 (3认同)

Zdr*_*nev 14

SELECT a.id 
FROM album a
LEFT JOIN track t ON a.id = t.album_id
WHERE t.id IS NULL
Run Code Online (Sandbox Code Playgroud)