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

本文讨论了在使用MySQL执行LEFT JOIN时,为什么在使用`SELECT *`时没有获取到预期的所有列。重点解析了SQL:2003标准中关于自然连接和使用`USING`的JOIN操作,以及冗余列处理规则。通过实例说明了如何理解和解决这个问题。
摘要由CSDN通过智能技术生成

I have following 2 tables 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);

I am running

select * from t1 left join t2 using(id);

Result:

+----+

| id |

+----+

| 1 |

| 2 |

| 3 |

+----+

On running script:

select t1.id, t2.id from t1 left join t2 using(id);

Result:

+----+------+

| id | id |

+----+------+

| 1 | NULL |

| 2 | 2 |

| 3 | 3 |

+----+------+

select * is supposed to return all the columns, so, why I am not getting 2 rows when I am using select *?

Note: I am using Mysql

解决方案

Natural joins and joins with USING, including outer join variants, are processed according to the SQL:2003 standard:

Redundant columns of a NATURAL join do not appear. Consider this set of statements:

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);

column j is named in the USING clause and should appear only once in the output, not twice.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值