2011-12-27 8 views
2

私は、結合されたテーブルの値に基づいて1つのクエリで複数のテーブルをクエリしようとしています。MySQL - nullの場合の高度なクエリと結合

SELECT a.id,a.name, 
IFNULL(b.imageurl, 'default image url') AS 'imageurl', 
IFNULL(b.imagecategory, '34') AS 'imagecategory', 
IFNULL(b.imagetype, 't') AS 'imagetype' 
FROM summary a 
LEFT JOIN images i ON a.id = b.id 
WHERE b.imagetype = 'thumbnail' AND b.imagecategory = '99' 

テーブル 'a'はメインテーブルであり、オブジェクトに関するさまざまな情報で構成されています。

テーブル 'b'は、各オブジェクトのいくつかのイメージURLから成ります。これらは 'imagetype'と 'imagecategory'を使ってフィルタリングされ、各オブジェクトの1つのイメージにのみ一致します。

テーブル 'b'に一致するid、imagetype、およびimagecategoryがある場合のみ、2つのテーブルの結合が機能します。そうでなければ、テーブル 'a'のレコードだけが返されます。これは私が望むものではありません。テーブル 'b'はIFNULL関数を使って設定されたデフォルト値を返すようにしたいので、このテーブルにリンクされたIDの値がない場合でも完全な結果セットを取得します。

どうすればいいですか?

答えて

6

imagesの列に対するテストをjoin句に移動するようにしてください。 imagesに一致するものがない場合は、nullがあなたの列にあり、それは何と等しくはありません。

SELECT a.id,a.name, 
IFNULL(b.imageurl, 'default image url') AS 'imageurl', 
IFNULL(b.imagecategory, '34') AS 'imagecategory', 
IFNULL(b.imagetype, 't') AS 'imagetype' 
FROM summary a 
LEFT JOIN images b ON a.id = b.id AND 
         b.imagetype = 'thumbnail' AND 
         b.imagecategory = '99' 
+0

ありがとう、それはトリックでした!私はWHERE句をジョインに追加する以外はすべてを試しました! – Chris

関連する問題