MySQL:如何匹配另一列中的值,从一列返回所有唯一值

时间:2018-03-31 02:14:54

标签: mysql unique

我有一个存储歌曲元数据的MySQL数据库。表音乐中的两个现有列是评级和标题。数据库超过9 GB。我想找到所有独特的歌曲标题,评级低于0-10等级的值,比如3.(这里的独特意味着我只需要看一次歌曲标题。)

一旦我得到了歌曲标题的结果列表,我将删除那些来自DB的低评级歌曲。但是,我在数据库中有另一个名为Albums的表,我从不想删除那里列出的任何专辑中的任何歌曲。

到目前为止我尝试的是:

SELECT DISTINCT Title FROM Music WHERE
Title NOT IN (SELECT Title FROM Music WHERE Rating >= 3)
AND Song NOT IN (SELECT Song FROM Albums)
ORDER BY Title desc

此查询可能有效;我不知道,因为它已经运行了几个小时。所以我也需要帮助找到更快的方法来获得结果。

1 个答案:

答案 0 :(得分:0)

从MUSIC获得评分低于3的歌曲,然后在关键词:歌曲上与ALBUM进行左连接。但也放了一个过滤器,在专辑中找不到MUSIC中的歌曲。

 SELECT DISTINCT T.TITLE
FROM MUSIC T
LEFT JOIN ALBUM A ON T.SONG = A.SONG
WHERE T.RATING < 3 
       AND A.SONG IS NULL
ORDER BY T.TITLE DESC;

见这里的演示;
http://sqlfiddle.com/#!9/65c2455/1