2

エンティティ属性値モデルを使用してオブジェクトを格納するデータベースを検索しようとしています。以下のクエリの何が問題なのか誰か教えてもらえますか?

SELECT * FROM object a
   INNER JOIN object_meta b
   ON a.id = b.object 
WHERE
   a.name LIKE '%michael%' AND
   b.name='type' AND b.value='judge'
   AND ( 
      (b.name='country' AND b.value='France') 
      OR  
      (b.name='country' AND b.value='Sweden')
   ) 
ORDER BY a.name DESC
LIMIT 0, 50;

この場合、名前に「マイケル」が含まれ、タイプが裁判官であり、スウェーデンまたはフランスから来たオブジェクトを選択したいと考えています。データベースを参照すると、クエリに一致するオブジェクトが存在することがわかりますが、クエリを実行しても何も表示されません。コマンド ライン経由でクエリを実行しているため、アプリケーション コードとは関係ありません。

テーブル構造

object
+----+------------+
| id | name       |
+----+------------+
|  1 | Michael... |
|  2 | Michael... | 
+----+------------+

object_meta
+--------+---------+-----------+
| object | name    | value     |
+--------+---------+-----------+
|   1    | type    | judge     |
|   2    | type    | judge     |
+--------+---------------------+
4

1 に答える 1

5

両方の条件を満たすことができる行が JOIN にないため、クエリは空のセットを返します b.name='type' AND b.name='country'

これを試して:

SELECT * FROM object a
   INNER JOIN object_meta b
   ON a.id = b.object 
WHERE
   a.name LIKE '%michael%' AND
   b.name='type' AND b.value='judge'
   AND EXISTS( SELECT 1 FROM object_meta b1 
               WHERE b1.[object]=b.[object] AND ( b1.name='country' AND (b1.value='France' OR b1.value='Sweden'))

   ) 
ORDER BY a.name DESC
LIMIT 0, 50;
于 2013-03-03T08:48:05.243 に答える