0

我试图不显示b.title标题中值为“Money”的任何结果,但%Money%正在返回:

Unknown column 'Money' in 'where clause'

询问:

SELECT `id`,`name`
FROM `users` AS u
WHERE `id` NOT IN ('
   SELECT `user_id`
   FROM `purchases` AS p
   INNER JOIN `books` b ON b.id = p.book_id AND b.title LIKE '%Money%'')
4

2 回答 2

4

删除多余的撇号:

SELECT `id`,`name`
FROM `users` AS u
WHERE `id` NOT IN (
   SELECT `user_id`
   FROM `purchases` AS p
   INNER JOIN `books` b ON b.id = p.book_id AND b.title LIKE '%Money%')
于 2013-03-25T19:15:39.763 回答
1

让我们仔细看看您的查询以了解发生了什么:

WHERE `id` NOT IN ('SELECT [...] LIKE '%Money%'')
--                 |<---------------->|^     ^ ^---- another string
--                   this is a string  |     |
--                                     |     | 
--                               % is the modulo operator

所以括号内的表达式为:“some string modulo Money modulo empty string”。如果没有引号,Money 指的是一个不存在的列名,这就是查询失败的地方。

您没有收到语法错误的唯一原因是“%”是一个有效的运算符。所以它有点“工作”是偶然的。

解决方案,如前所述:不要引用子查询,它是 SQL 表达式,而不是字符串。

于 2013-03-27T13:10:25.307 回答