我在一个包含记录集合的开源数据库(LibreOffice Base)中创建了一个简单的表。它包含艺术家,专辑,年份,唱片标签和记录代码作为主键。我正在尝试创建一个SQL查询,当该艺术家在多个标签上时,该查询将仅显示艺术家和唱片标签。
SELECT "RecordLabel", "ArtistName"
FROM "record_collection"
GROUP BY "ArtistName", "RecordLabel"
HAVING ( MIN ("RecordLabel") > 1) AND...
当同一位艺术家的唱片标签不同时。例如,IE,Frank Sinatra在3个不同的标签上,我希望只显示他的名字和3个标签。
非常感谢任何帮助!
答案 0 :(得分:0)
您可以使用以下查询获取多个标签上的艺术家列表:
SELECT ArtistName
FROM record_collection
GROUP BY ArtistName
HAVING COUNT(DISTINCT RecordLabel) > 1;
然后,您可以在查询中使用它来获取更多详细信息:
SELECT rc.*
FROM record_collection rc
WHERE rc.ArtistName IN (SELECT ArtistName
FROM record_collection
GROUP BY ArtistName
HAVING COUNT(DISTINCT RecordLabel) > 1
);
更聪明的方法是选择艺术家的记录,其中艺术家的另一条记录具有不同的标签:
SELECT rc.*
FROM record_collection rc
WHERE EXISTS (SELECT 1
FROM record_collection rc
WHERE rc2.ArtistName = rc.ArtistName AND rc2.RecordLabel <> rc.RecordLabel
);
使用正确的索引,此版本可能具有更好的性能。