我尝试不在标题中显示值为“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%'')
答案 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表达式,而不是字符串。