2

現在 Web サイトにあるアイテムを保持する hg_liveitems というテーブルがあります。「タイプ」フィールドには、果物、野菜、または樹木を指定できます。同じフィールドを持つ果物、木、野菜用の個別のテーブルがあります。name基本的に、正しいフィールドと結合する正しいテーブルを選択するクエリが必要です。現時点で私はこれを持っています:

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 ステートメントについて十分な知識がなく、何が起こっているのかを知ることができません。

4

1 に答える 1

0

そのような条件付き内部結合を行うことはできません-構文エラーです。結果を制限するために、3 つの外部結合と 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'
于 2012-05-08T01:52:20.630 に答える