使用SQL第一次,如果我的是一个愚蠢的错误,所以请耐心等待。我的数据库有3个表格。但是对于这个查询,我们只关注ALBUM
表。对于每张专辑,它包含发行年份,艺术家姓名,专辑名称,专辑评分。SQL忽略我的状况?
我试图找到结果,其中两张专辑都没有更远的时间超过一定的年限。
这是我想出了:
SELECT "ALBUM"."ARTIST"
FROM public."ALBUM"
WHERE NOT EXISTS
(SELECT "A"."ARTIST"
FROM public."ALBUM" AS "A"
WHERE NOT EXISTS
(SELECT "B"."ARTIST"
FROM
public."ALBUM" "A",
public."ALBUM" "B"
WHERE
"A"."TITLE" != "B"."TITLE" AND
"A"."ARTIST" = "B"."ARTIST" AND
"B"."YEAR" <= "A"."YEAR" AND
"B"."YEAR" +4 < "A"."YEAR"
)
)
UNION
SELECT "A"."ARTIST"
FROM public."ALBUM" "A"
WHERE NOT EXISTS
(SELECT "B"."ARTIST"
FROM public."ALBUM" "B"
WHERE "A"."ARTIST" = "B"."ARTIST"
AND "A"."TITLE" != "B"."TITLE") ;
我的想法是:我第一次找到所有那些对他们来说存在至少两张唱片,但对于一个给定的专辑有4年之内没有其他的艺术家,然后我会从所有艺术家的集合中减去这个组。联盟部分是为我的结果添加总共只发布了1张专辑的那些人。
的代码运行正常在PostgreSQL中,但返回的数据实际上并不在代码中提供这样的东西的条件筛选被忽略/不工作,但我一直停留在现在该怎么办了一段时间。任何提示?
请添加样本数据,并输出演示该问题的样本数据。 –
不相关,但是:你应该真的避免那些可怕的带引号的标识符。 –
第一个SELECT工作是否独立?第二个SELECT工作是否独立? – jarlh