sql - 我怎样才能使这个 MySQL 查询工作?

标签 sql mysql

我有一个名为“bandsplusrating”的表和一个名为“ratings”的表 “bandsplusrating”表中填满了频段,“ratings”表开始时为空。

两个表都有名为“naam”的字段,可以将它们连接起来。 表“ratings”有一个名为“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'

当其他用户对其进行评分时,此查询仍会显示一条记录。

我已经挣扎了好几天了,有人可以帮助我吗?

谢谢!

最佳答案

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

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

编辑:

我刚刚看到 OMG Ponies 的彻底回复,并决定添加另一种方法来完成它,这只是 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

(个人觉得这个不如上一个好)

关于sql - 我怎样才能使这个 MySQL 查询工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106047/

相关文章:

mysql - 选择一个 sql 字段并且不显示所选内容的特定单词

mysql - 将修改的记录从一个数据库复制到mysql中的另一个数据库

mysql - Like 运算符中的变量或内部选择?

mysql - fortrabbit 中 Laravel-4 和 phpmyadmin 安装

Sql 通知支持的事务隔离级别

mysql - mysql数据库表中的pkey

mysql - MySQL IF() 中要做的两件事

mysql - mysql.log 中的奇怪查询

MySQL JOIN 子查询为假。子查询会执行吗?

PHP 驱动的详尽统计数据 - 服务器端文本文件或 MySQL 表?