mysql - 无法使用select *获取所有列

时间:2017-08-10 06:23:51

标签: mysql sql

我有以下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

2 个答案:

答案 0 :(得分:2)

as doc says:

  

使用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语句中,列jUSING子句中命名,并且在输出中只出现一次,而不是两次。

JOIN syntax

来自维基百科:

  

[...] USING列表中提到的任何列只会出现一次,名称不合格,而不是连接中的每个表一次。

JOIN (SQL)