我有以下2个表t1,t2
CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 (
id INT PRIMARY KEY
);
INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);
我正在运行
select * from t1 left join t2 using(id);
结果:
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
关于运行脚本:
select t1.id, t2.id from t1 left join t2 using(id);
结果:
+----+------+
| id | id |
+----+------+
| 1 | NULL |
| 2 | 2 |
| 3 | 3 |
+----+------+
select *应该返回所有列,那么,当我使用select *时,为什么我没有得到2行?
注意:我使用的是Mysql
答案 0 :(得分:2)
使用USING进行自然连接和连接,包括外连接变体,根据SQL:2003标准进行处理:
不会出现NATURAL连接的冗余列。考虑这组陈述:
CREATE TABLE t1 (i INT, j INT);
CREATE TABLE t2 (k INT, j INT);
INSERT INTO t1 VALUES(1, 1);
INSERT INTO t2 VALUES(1, 1);
SELECT * FROM t1 JOIN t2 USING (j);
列j在USING子句中命名,在输出中只出现一次,而不是两次。
答案 1 :(得分:2)
这是USING
子句的正常行为。以下是MySQL文档的引用:
同样,在第二个
SELECT
语句中,列j
在USING
子句中命名,并且在输出中只出现一次,而不是两次。
来自维基百科:
[...]
USING
列表中提到的任何列只会出现一次,名称不合格,而不是连接中的每个表一次。