MySQL删除重复列在左连接,3台(MySQL Removing duplicate columns

2019-07-05 12:27发布

我有三个表,每个表有一个外键。 当我执行连接,我得到重复列。

特定

mysql> describe Family;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| HEAD_name     | varchar(45) | NO   | PRI |         |       |
| Family_Size   | int(11)     | NO   |     |         |       |
| Gender        | char(1)     | NO   |     |         |       |
| ID_Number     | int(11)     | NO   |     |         |       |
| DOB           | date        | NO   |     |         |       |
| Supervisor_ID | int(11)     | NO   | MUL |         |       |
+---------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> describe SUPERVISOR;
+-------------------+---------------+------+-----+---------+-------+
| Field             | Type          | Null | Key | Default | Extra |
+-------------------+---------------+------+-----+---------+-------+
| Supervisor_ID     | int(11)       | NO   | PRI |         |       |
| Supervisor_Name   | varchar(45)   | NO   |     |         |       |
| Supervisor_Number | decimal(10,0) | NO   |     |         |       |
| Center_ID         | int(11)       | NO   | MUL |         |       |
+-------------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> describe CENTER;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| Center_ID | int(11)     | NO   | PRI |         |       |
| Location  | varchar(45) | NO   |     |         |       |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

我的查询语句:

SELECT * from Family
   JOIN SUPERVISOR on ( Family.Supervisor_ID = SUPERVISOR.Supervisor_ID)
   JOIN CENTER on (SUPERVISOR.Center_ID = CENTER.Center_ID); 

我的目标是从没有加入重复列获得的所有列的一行。 那么,什么是我应该使用SQL语句的语法?

Answer 1:

默认情况下,MySQL将返回所有列的所有表,如果你使用* 。 您需要在您的查询输入明确列名来获取他们想要的方式。 按如下方式使用查询:

SELECT A.HEAD_name, A.Family_Size, A.Gender, A.ID_Number, A.DOB,
    B.Supervisor_ID, B.Supervisor_Name, B.Supervisor_Number,
    C.Center_ID, C.Location
FROM Family A
JOIN SUPERVISOR B on ( A.Supervisor_ID = B.Supervisor_ID)
JOIN CENTER C on (B.Center_ID = C.Center_ID);


Answer 2:

这个问题可以通过“使用”关键字来解决。

SELECT * from Family
   JOIN SUPERVISOR on ( Family.Supervisor_ID = SUPERVISOR.Supervisor_ID)
   JOIN CENTER on (SUPERVISOR.Center_ID = CENTER.Center_ID); 

在你的情况下,查询将成为

SELECT * FROM FAMILY 
  JOIN (SUPERVISOR JOIN CENTER USING(Center_ID)) USING(Supervisor_ID);

点是很简单,如果有两个表A(A,B)和B(B,C),然后加入以产生形式的结果之后(A,B,C)

Select *
    from A JOIN B USING(b);

会给结果集有三列(A,B,C)

注意:由于我不知道我们是否能够利用使用多个参数,可以因此我把它作为子查询。



Answer 3:

你没有得到重复列,你真正得到的是从表族的Supervisor_ID列(即Family.Supervisor_ID)和Supervisor_ID从表主管(即Supervisor.Supervisor_ID),但你的结果集,你也可以看到作为Supervisor_ID ,这就是为什么你认为他们是重复的。 同样将与Center_iD发生。

解决的办法是,以指定每个表需要的字段,并决定是否需要获得Supervisor_ID和Center_ID并表从得到它。



Answer 4:

据奥赖利,

寻找一个解释计划
你可以做Y的内部连接....其中w = Z一_select X ...这只是一个例子



文章来源: MySQL Removing duplicate columns on Left Join, 3 tables