2

結合されたテーブルの値に基づいて、1 つのクエリで複数のテーブルをクエリしようとしています。

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 つの画像のみに一致します。

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

これどうやってするの?

4

1 に答える 1

7

代わりに、列に対するテストをimages結合句に移動してみてください。一致するものがない場合imagesnull、列にあり、それは何にも等しくありません。

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'
于 2011-12-27T13:28:02.293 に答える