2012-03-18 5 views
0

TABLE1(ID、フィールド1、other_table_id)、表2(ID、フィールド1)と表3(ID、フィールド1)があります。私はtable1でSELECTを持っていますが、field1 = 2または3の値に応じて、テーブル2または3でジョイする必要があります...(other_table_idは、table2またはtable3のIDです)。MySQL:フィールド値に応じたクエリ - ケースを使用してクエリを構築できますか?それを容易にする

これにCASEを使用できますか?そうでない場合は、どのようにして最善を尽くすことができますか1つのクエリでそれを実行できますか?

ありがとうございます!


PS:私は、これは同様のトピックだと思います:MySQL query where JOIN depends on CASEが、私は解決策を理解していませんでした。また、私はEDIT


... MySQLの(http://dev.mysql.com/doc/refman/5.0/en/case-statement.html)からCASEを使用する方法を得ることはありません:ypercube、あなたの答えをありがとう!申し訳ありませんが、私は構造が完全に正しいとは言えませんでした。実際には、テーブルは次のようになります。

TABLE1:ID、ASSIGNED_TOは、assigned_id rooms_assigned:ID、objects_idは、 オブジェクトroom_type_id:ID、...だから

を、私はPHPの$のOBJECT_IDオブジェクトIDを持っていますだから、どのようにクエリのWHEREでこれを使用しますか?私は「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 ? 

EDIT 2は?:

あなたの答えによると、右のクエリは次のようになります。私は単にクエリステートメントでWHEREを使用しませんでしたが、ON(ra.id、ra.object_id、2)=(t.assigned_id、 "。$ object_id。"、t.assigned_to)のように "ON" ...

ありがとう、あなたは大きな助けになりました! :)

答えて

1

2本使用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感謝、それは非常に素晴らしいと理解しやすいです!しかし、私はこれを実装するにはどうすればいいのでしょうか?ありがとうございました! – Chris

+0

ありがとう、ypercube、私は自分のためにそれを解決したと思う! :) – Chris

関連する問題