0

ID の 2 つのセット (dec_id と rec_id) を持つテーブルがあります。dec_id が Table1 にある場合は、そのテーブルに参加する必要があります。そうでない場合は、テーブル 2 に参加します。2列目も同様です。また、どの ID がどのテーブルで見つかったかを知る必要もあります。

表 1 の抽象的な構造は次のとおりです。

dec_id rec_id     
-----------------
11 16
23 24
15 31

表 2 と 3 は、すべての意図と目的が同じです (実際のデータは別として)。

id 名前 データ1 データ2
----------------------------------------------
11 axp
41バイト
55czr

そしてロジック(要約):

IF (dec_id IS IN Table1) {
    LEFT JOIN Table1 on (dec_id = table1.id);
    LEFT JOIN Table2 on (rec_id = table2.id);
    FLAG = 1;
} ELSE {
    LEFT JOIN Table1 on (rec_id = table1.id);
    LEFT JOIN Table2 on (dec_id = table2.id);
    FLAG = 0;
}
LEFT JOIN Table3, Table4, ...

PHP で複数のクエリを使用して結果を達成できることはわかっていますが、効率のために可能であれば回避したいと考えています。残念ながら、私の SQL の知識は役に立ちません。

前もって感謝します!

4

1 に答える 1

0

このようなものをお探しですか?

SELECT COALESCE(t2.id, t3.id) id,
       (t2.id IS NOT NULL) flag,
       COALESCE(t2.name, t3.name) name,
       COALESCE(t2.data1, t3.data1) data1
  FROM table1 t1 LEFT JOIN table2 t2
    ON t1.dec_id = t2.id LEFT JOIN table3 t3
    ON t1.rec_id = t3.id

これがSQLFiddleのデモです

于 2013-09-08T08:44:30.710 に答える