SQL 存在查询

SQL EXISTS Query

我正在尝试使用 EXISTS 查询向 table 的专辑中的 select 写入查询,至少有一位艺术家已被分配到该专辑。

专辑和艺术家包含在单独的 table 中,并且可能存在未分配艺术家的专辑,其中值 returns 为 NULL。

有人可以提供有关如何创建此查询的示例。

编辑:添加下面的非工作示例

SELECT artist_name FROM artist
JOIN album ON artist.artist_id = album.artist_id
WHERE EXISTS (SELECT album_id FROM album)

查询返回了正确的结果,但我认为最后一行不正确,因为它没有使用至少一个存在的操作,所以我认为需要有一个运算符在子查询中,或者与 NULL 值有关的事情。

如果表格如下:

artist_id, artist_name, album_id

album_id, album_name

那么查询将是

select * 
  from album alb
  left join artist art on(alb.album_id = art.album_id)
  where art.artist_id is null

使用存在:

select * 
  from album alb 
 where not exists 
      (select * from artist art where art.album_id = alb.album_id)

您的查询有效,但出于一个神秘的原因:

  • 联接正在执行工作。
  • exists 总是返回 true(假设 album 至少有一行)。

实际上,它有点管用,因为问题是关于专辑的,而您正在返回艺术家。

不要在外部查询中使用 join。相反,您需要一个相关的子查询:

SELECT al.*
FROM album al
WHERE EXISTS (SELECT 1 FROM artist al WHERE a.artist_id = al.artist_id)