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)
我正在尝试使用 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)