2012-05-08 114 views
2

我有一個名爲hg_liveitems的表,它包含當前網站上的項目。 '類型'字段可以是水果,蔬菜或樹木。有單獨的水果,樹木和蔬菜的桌子都有相同的領域。基本上我需要一個查詢,選擇正確的name字段以及正確的表加入。在一分鐘我有這樣的:動態CASE sql語句的問題

SELECT `hg_liveitems`.`id`, `hg_liveitems`.`price`, `hg_liveitems`.`grabs`, `hg_liveitems`.`quantity`, `hg_liveitems`.`created` 
    CASE `hg_liveitems`.`type` 
     WHEN '1' THEN `hg_fruit`.`name` 
     WHEN '2' THEN `hg_trees`.`name` 
     WHEN '3' THEN `hg_veg`.`name` 
    END AS `name` 
FROM `hg_liveitems` 
INNER JOIN 
    CASE `hg_liveitems`.`type` 
     WHEN '1' THEN `hg_fruit` ON `hg_liveitems`.`produce_id` = `hg_fruit`.`id` 
     WHEN '2' THEN `hg_trees` ON `hg_liveitems`.`produce_id` = `hg_trees`.`id` 
     WHEN '3' THEN `hg_veg` ON `hg_liveitems`.`produce_id` = `hg_veg`.`id` 
    END 
WHERE `hg_liveitems`.`grower_id` = '2' 
AND `hg_liveitems`.`status` < '2' 

,但我剛開始的錯誤,我不知道有足夠的瞭解CASE語句知道這是怎麼回事。

+0

重複的問題:http://stackoverflow.com/questions/3208863/mysql-dynamic-join –

回答

0

你不能這樣做一個有條件的內連接 - 這是一個語法錯誤。考慮重寫爲三個外連接和一個where子句來限制結果。

SELECT `hg_liveitems`.`id`, `hg_liveitems`.`price`, `hg_liveitems`.`grabs`, `hg_liveitems`.`quantity`, `hg_liveitems`.`created` 
CASE `hg_liveitems`.`type` 
    WHEN '1' THEN `hg_fruit`.`name` 
    WHEN '2' THEN `hg_trees`.`name` 
    WHEN '3' THEN `hg_veg`.`name` 
END AS `name` 
FROM `hg_liveitems` 
LEFT OUTER JOIN `hg_fruit` ON `hg_liveitems`.`produce_id` = `hg_fruit`.`id` 
LEFT OUTER JOIN `hg_trees` ON `hg_liveitems`.`produce_id` = `hg_trees`.`id` 
LEFT OUTER JOIN `hg_veg` ON `hg_liveitems`.`produce_id` = `hg_veg`.`id` 
WHERE `hg_liveitems`.`grower_id` = '2' 
AND `hg_liveitems`.`status` < '2' 
+0

感謝dasblinkenlight,即完美。我不確定你是否可以在連接中做案例,但不知道如何在沒有的情況下排序查詢。 –