我有一个名为“ 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 equallyNOT EXISTS的效果不佳。

关于sql - 如何使此MySQL查询正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2106047/

10-16 16:32