2012-03-18 82 views
0

爲了方便,有表1(ID,FIELD1,other_table_id),表2(ID,FIELD1)和表3 (ID,字段1)。我在table1上有一個SELECT,但取決於field1 = 2或3的值,它應該與表2或3一起加入...(其他_table_id然後是table2或table3的id)。MySQL:查詢取決於字段值 - 可以CASE幫助建立您的查詢?

我可以使用CASE嗎?如果不是,我該如何做到最好?我可以在一個查詢中完成嗎?

非常感謝您提前!


PS:我覺得這是一個類似的話題:MySQL query where JOIN depends on CASE,但我不明白的解決方案。另外,我不明白如何使用CASE從MySQL(http://dev.mysql.com/doc/refman/5.0/en/case-statement.html)...


編輯:謝謝您的回答,ypercube!我很抱歉,我描述的結構不完全正確。實際上,表是這樣的:

表1:ID,assigned_to,assigned_id rooms_assigned:ID,objects_id,room_type_id 對象:ID,...

所以,我在PHP $ OBJECT_ID對象ID ,那麼你如何在查詢中的WHERE中使用它?

根據你的答案,將正確的查詢這個樣子?:然後

SELECT COALESCE (ra.objects_id, o.id) AS objects_id 
FROM table1 as t 
LEFT JOIN rooms_assigned AS ra 
ON (ra.id,2)=(t.assigned_id,t.assigned_to) 
LEFT JOIN objects AS o ON (o.id,3)=(t.assigned_id,t.assigned_to) 

WHERE ? 

編輯2:我想我解決了有關「WHERE」我自己的問題。我只是沒有在查詢語句中使用WHERE,而是將它添加到兩個「ON」,如ON(ra.id,ra.object_id,2)=(t.assigned_id,「。$ object_id。」,t.assigned_to) ...

再次感謝你,你是一個很好的幫助! :)

回答

1

使用兩LEFT連接和COALESCE()SELECT列表:

SELECT 
    COALESCE(t2.someColumn, t3.someColumn) AS someColumn 

FROM 
     table1 AS t 
    LEFT JOIN 
     table2 AS t2 
      ON (t2.id, 2) = (t.other_table_id, t.field1) 
    LEFT JOIN 
     table3 AS t3 
      ON (t3.id, 3) = (t.other_table_id, t.field1) 
+0

謝謝ypercube的回答,這是非常大的,易於理解!然而,我忘了說我需要一個WHERE(請參閱上面的編輯)我將如何實現這個?謝謝! – Chris 2012-03-18 11:17:05

+0

再次感謝你,ypercube,我想我自己解決了它! :) – Chris 2012-03-18 11:34:36