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

ETC...

在某些情况下,我需要跳过一个或几个内部连接。到现在为止,我不得不复制脚本,用我不需要的连接注释掉那些行。是否有任何方法可以使用变量或 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 回答