0

假设我们有这个查询:

SELECT t1.* from t1
LEFT JOIN t2 
ON t2.t1id = t1.id;

当然,这是一个不好的例子,但我的观点是正确的;什么被认为是左侧? t1还是t2?它是第一个选定的表还是on 子句中的第一个表或完全不同的东西?

由于Coding Horror ,我得到了不同的连接,但我在任何地方都找不到解释?

4

3 回答 3

3

如果你写它会更明显;

SELECT t1.* 
FROM t1 LEFT JOIN t2 
ON t2.t1id = t1.id;

本质上,LEFT JOIN表示包含最左边表中的每一行,最t1右边表中的匹配行是可选的,并且RIGHT JOIN表示始终包含最右边表t2中的行,最左边表中匹配的行是可选的。

于 2013-08-11T06:56:16.647 回答
1

左侧是您要包含的部分,但不限于它是否不存在。

看看这个 JOINS 的图形表示

假设你有

TABLE1 

ID

1
2
3

TABLE2

ID

2
3
4

SELECT *
FROM t1 LEFT JOIN
t2 ON t1.ID = t2.ID

会回来

t1.ID   t2.ID
1       NULL
2       2
3       3

SELECT *
FROM t1 INNER JOIN
t2 ON t1.ID = t2.ID

会回来

t1.ID   t2.ID
2       2
3       3

SELECT *
FROM t1 RIGHT JOIN
t2 ON t1.ID = t2.ID

会回来

t1.ID   t2.ID
2       2
3       3
NULL    4
于 2013-08-11T06:52:49.420 回答
1

t2是“左侧”。本质上,这表示“从等于或不存在的t1地方选择所有记录。如果“左侧”条件不存在(即这是一个内部连接而不是外部(左)连接),则需要记录存在。t1.idt2.t2idt2.t1idt2.t1id = t1.id

于 2013-08-11T06:54:24.337 回答