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

したがって、括弧内の式は次のようになります。「空の文字列を法とする Moneyを 法とするいくつかの文字列」。引用符がない場合、Moneyは列名を参照しますが、これは存在せず、クエリが失敗する場所です。

構文エラーが発生しない唯一の理由は、「%」が有効な演算子であるということです。ですから、それは偶然に「機能」するようなものです。

解決策は、すでに述べたように、サブクエリを引用しないでください。これはSQL式であり、文字列ではありません。

于 2013-03-27T13:10:25.307 に答える