我有一个存储歌曲元数据的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
此查询可能有效;我不知道,因为它已经运行了几个小时。所以我也需要帮助找到更快的方法来获得结果。
答案 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;