Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql (我的)SQL如何计算链式左/内联接?_Mysql_Sql_Join_Left Join_Inner Join - Fatal编程技术网

Mysql (我的)SQL如何计算链式左/内联接?

Mysql (我的)SQL如何计算链式左/内联接?,mysql,sql,join,left-join,inner-join,Mysql,Sql,Join,Left Join,Inner Join,我们提供了3个表格: T1: T2: T3: id | t3_id id | name id | t2_id ---------- --------- ---------- 1 | 2 1 | abc 1 | 1 2 | NULL 2 | 123 2 | 1 3 | 1 3 |

我们提供了3个表格:

T1:               T2:              T3:

id | t3_id        id | name        id | t2_id
----------        ---------        ----------
1  | 2            1  | abc         1  | 1
2  | NULL         2  | 123         2  | 1
3  | 1            3  | ab1         3  | 3
4  | 4            4  | 32b         4  | 2
现在,我们测试了以下连接:

1.: 这一点很清楚。结果:

T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name
-----------------------------------------------------
1     | 2        | 2     | 1        | 1     | abc
3     | 1        | 1     | 1        | 1     | abc
4     | 4        | 4     | 2        | 2     | 123
2.: 这一点也很清楚:

T1.id | T1.t3_id | T3.id | T3.t2_id | T2.id | T2.name
-----------------------------------------------------
1     | 2        | 2     | 1        | 1     | abc
2     | NULL     | NULL  | NULL     | NULL  | NULL
3     | 1        | 1     | 1        | 1     | abc
4     | 4        | 4     | 2        | 2     | 123
三。: 这个有点奇怪。结果(与第一个结果相同):

我不明白MySQL是如何计算这个表达式的。为什么它忽略了左连接,而似乎更喜欢内部连接

如果I阅读此查询,则如下所示:

  • 从T1获取数据
  • 通过左连接从T2获取数据(意味着:仅在可能的情况下,否则获取空数据)
  • 通过内部联接从T3获取数据(意味着:删除所有无法通过此内部联接联接的T2数据)
  • 但看起来我得把问题倒过来看


    有人能给我解释一下这个场景吗?

    左连接类似于“或”,而内连接类似于“和”。所以有这样的先兆

    t1 left join (t2 inner join t3)
    
    这与我的想法没有什么不同

    (t1 left join t2) inner join t2
    

    内部联接
    应用于您已有的结果(即
    T1左联接T3
    ),而不仅仅应用于
    T3

    你读起来就像:

    (T1 LEFT JOIN (T3 INNER JOIN T2))
    
    ((T1 LEFT JOIN T3) INNER JOIN T2)
    
    但这就像:

    t1 left join (t2 inner join t3)
    
    (t1 left join t2) inner join t2
    
    (T1 LEFT JOIN (T3 INNER JOIN T2))
    
    ((T1 LEFT JOIN T3) INNER JOIN T2)