2011-12-27 21 views
2

我想用一個基於連接表的值的查詢來查詢幾個表。MySQL - 基於if null和join的高級查詢

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'進行過濾,以便僅爲每個對象匹配一個圖像。

兩個表的連接只有在表'b'具有匹配的id,imagetype和imagecategory時纔有效。如果不是,只有表格'a'中的記錄被返回,這不是我想要的。我希望table'b'返回使用IFNULL函數設置的默認值,所以即使此表缺少鏈接的id:s的值,我也會得到完整的結果集。

我該怎麼做?

回答

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 2011-12-27 13:46:41