结果中同名的列只出现一次,且都是值相同的那些记录。
通过向两表中插入一条新记录,令它们的 j 不相同,再进行测试。
mysql> INSERT INTO t1 VALUES(2, 2); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO t2 VALUES(2, 3); Query OK, 1 row affected (0.00 sec) mysql> select * from t1 natural join t2; +------+------+------+ | j | i | k | +------+------+------+ | 2 | 2 | 1 | +------+------+------+ 1 row in set (0.00 sec)
a LEFT JOIN b USING (c1, c2, c3) a LEFT JOIN b ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3
USING 情况下的返回:
COALESCE(a.c1, b.c1), COALESCE(a.c2, b.c2), COALESCE(a.c3, b.c3)
ON 的返回:
a.c1, a.c2, a.c3, b.c1, b.c2, b.c3
ON 语句中只能引用其操作表(operands)中的表。
CREATE TABLE t1 (i1 INT); CREATE TABLE t2 (i2 INT); CREATE TABLE t3 (i3 INT);
针对上面的表,以下查询会报错:
mysql> SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3; ERROR 1054 (42S22): Unknown column 'i3' in 'on clause'
而以下查询则可以:
mysql> SELECT * FROM t1 JOIN t2 JOIN t3 ON (i1 = i3); Empty set (0.00 sec)
因为此时 t3 在 ON 语句的操作范围内了。
相关资源
总结
下载本文