mysql - 跳过多个表mysql查询中的内连接

标签 mysql sql

我构建了一个大型脚本,其中有多个内部联接作为“条件”(而不是使用 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

等等...

在某些情况下,我需要跳过一个或多个内部联接。 到目前为止,我必须复制脚本,注释掉带有我不需要的连接的行。 有没有办法使用变量或 IF 子句来跳过连接,或者至少是“全选”方式?

最佳答案

假设 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";
}

等等。与您所有的加入。

关于mysql - 跳过多个表mysql查询中的内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920194/

相关文章:

mysql - 超过 10000 列的表的最佳结构

mysql - 从子表中选择聚合

mysql - 如何释放: MYSQL_ROW row;?

mysql - 检查第二个表中是否存在数据

php - 是否值得将关键字 <-> 链接关系保存到 "hastable"之类的 mysql 结构中?

MySQL 脚本触发错误 #1241

c# - 在C#中用参数动态替换SQL字符串

c# - 林克。从多个表中选择

SQL 错误消息 142,级别 15,状态 2,第 0 行 'TABLE' 约束定义的语法不正确

mysql - Sequelize 使用 MySQL 抛出断言错误