MYSQL Query返回列的时候应该是值

时间:2013-03-25 19:14:23

标签: mysql

我尝试不在标题中显示值为“Money”b.title的任何结果,但%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%'')

2 个答案:

答案 0 :(得分: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%')

答案 1 :(得分:1)

让我们仔细查看您的查询,了解正在发生的事情:

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

因此括号内的表达式为:“某些字符串 modulo Money modulo 空字符串”。没有引号,Money引用的是一个列名,它不存在,而且是查询失败的地方。

您没有收到语法错误的唯一原因是“%”是有效的运算符。因此它偶然“有效”。

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