SQL查询 - 如何仅显示具有不同值的位置

时间:2016-04-17 16:32:08

标签: sql database

我在一个包含记录集合的开源数据库(LibreOffice Base)中创建了一个简单的表。它包含艺术家,专辑,年份,唱片标签和记录代码作为主键。我正在尝试创建一个SQL查询,当该艺术家在多个标签上时,该查询将仅显示艺术家和唱片标签。

SELECT "RecordLabel", "ArtistName" 
FROM "record_collection"
GROUP BY "ArtistName", "RecordLabel"
HAVING ( MIN ("RecordLabel") > 1) AND...

当同一位艺术家的唱片标签不同时。例如,IE,Frank Sinatra在3个不同的标签上,我希望只显示他的名字和3个标签。

非常感谢任何帮助!

1 个答案:

答案 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
             );

使用正确的索引,此版本可能具有更好的性能。