我有一个名为“ bandsplusrating”的表和一个名为“ ratings”的表
表“ bandsplusrating”填充有带,表“ ratings”开始为空。
这两个表都有一个名为“ naam”的字段,可以将它们连接在一起。
表“评级”具有一个名为“全名”的字段
每个频段有多个评级(bandsplusrating)将存储在表“评级”中
现在,我想显示来自“ bandsplusrating”的所有记录,这些记录尚未由给定用户评分(ratings.fullname)
SELECT b.naam, b.stijl
FROM bandsplusrating b
LEFT JOIN ratings r ON b.naam = r.naam
WHERE r.fullname NOT LIKE 'Obama'
当其他用户对其进行评分时,该查询仍将显示一条记录。
我现在已经挣扎了好几天,有人可以帮我吗?
谢谢!
最佳答案
使用NOT IN:
SELECT b.naam,
b.stigl
FROM BANDPLUSRATING b
WHERE b.naam NOT IN (SELECT r.naam
FROM RATINGS r
WHERE r.fullname LIKE 'Obama')
使用不存在:
SELECT b.naam,
b.stigl
FROM BANDPLUSRATING b
WHERE NOT EXISTS(SELECT NULL
FROM RATINGS r
WHERE r.naam = b.naam
AND r.fullname LIKE 'Obama')
使用LEFT JOIN / IS NULL:
SELECT b.naam,
b.stigl
FROM BANDPLUSRATING b
LEFT JOIN RATINGS r ON r.naam = b.naam
AND r.fullname LIKE 'Obama'
WHERE r.naam IS NULL
性能
Of the three options, the
NOT IN
and LEFT JOIN/IS NULL
perform equally。 NOT EXISTS
的效果不佳。关于sql - 如何使此MySQL查询正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2106047/