0

「条件」として機能するいくつかの内部結合を含む大きなスクリプトを作成しました (WHERE 句を使用する代わりに)。サンプルとして:

SELECT T1.*
FROM Table1 T1
    INNER JOIN Table2 T2
        ON T1.id = T2.id
    INNER JOIN Table3 T3
        ON T2.id = T3.id
    INNER JOIN Table4 T4
        ON T1.id = T4.id

等...

特定の条件下では、1 つまたは複数の内部結合をスキップする必要があります。今まで、必要のない結合を含む行をコメントアウトして、スクリプトを複製する必要がありました。変数または IF 句を使用して結合をスキップする方法、または少なくとも「すべて選択」する方法はありますか?

4

1 に答える 1

1

phpを想定:

$SQL = "
SELECT T1.*
FROM Table1 T1
    INNER JOIN Table2 T2
        ON T1.id = T2.id" . ($variable1 == x ? " OR TRUE=TRUE" : "") . "
    INNER JOIN Table3 T3
        ON T2.id = T3.id" . ($variable2 == y ? " OR TRUE=TRUE" : "") . "
    INNER JOIN Table4 T4
        ON T1.id = T4.id" . ($variable3 == z ? " OR TRUE=TRUE" : "")

ただし、クエリを動的に作成する必要があると確信しています。

$SQL = "
SELECT T1.*
FROM Table1 T1";

if ($variable1 == x) {
    $SQL .= " INNER JOIN Table2 T2 ON T1.id = T2.id";
}

if ($variable2 == y) {
    $SQL .= " INNER JOIN Table3 T3 ON T2.id = T3.id";
}

if ($variable3 == z) {
    $SQL .= " INNER JOIN Table4 T4 ON T3.id = T4.id";
}

など、すべての参加で。

于 2013-02-17T12:12:37.190 に答える