我如何使这个MySQL查询工作?

Che*_*rth 0 mysql sql

我有一个名为'bandsplusrating'的表和一个名为'rating'的表.'bandsplusrating'表填充了乐队,表'rating'开始为空.

两个表都有一个名为'naam'的字段,可以将它们连接起来.表'评级'有一个名为'fullname'的字段

每个频段的多个评级(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'
Run Code Online (Sandbox Code Playgroud)

当其他用户对其进行评级时,此查询仍会显示记录.

我现在已经好几天了,有人能协助我吗?

谢谢!

Rol*_*man 5

SELECT    b.naam, b.stijl
FROM      bandsplusrating b
LEFT JOIN ratings r 
ON        b.naam  = r.naam
AND       'Obama' = r.fullname
WHERE     r.naam IS NULL
Run Code Online (Sandbox Code Playgroud)

诀窍是,在WHERE之前评估LEFT JOIN.因此,首先让联接推出,任何来自bandplusrating的行与评级中的任何内容都不匹配将产生评级的空白记录(仅具有NULL值的评级记录).然后,您可以使用WHERE并通过要求评级中的某些已知强制列来过滤IS NULL,您实际上只会说:那些不匹配的列.

编辑:

我刚刚看到OMG小马的全面回复,并决定添加另一种方法来做到这一点,这只是LEFT JOIN解决方案的一个细微变化:

SELECT    b.naam, b.stijl
FROM      bandsplusrating b
LEFT JOIN ratings r 
ON        b.naam  = r.naam
AND       'Obama' = r.fullname
GROUP BY  b.naam, b.stijl
HAVING    COUNT(r.naam) = 0
Run Code Online (Sandbox Code Playgroud)

(就我个人而言,我觉得这个不如前一个好)