MySQL删除左连接,3个表上的重复列

Moh*_*med 10 mysql database join mysql-workbench

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

特定

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)
Run Code Online (Sandbox Code Playgroud)

我的查询声明:

SELECT * from Family
   JOIN SUPERVISOR on ( Family.Supervisor_ID = SUPERVISOR.Supervisor_ID)
   JOIN CENTER on (SUPERVISOR.Center_ID = CENTER.Center_ID); 
Run Code Online (Sandbox Code Playgroud)

我的目标是从连接中获取所有列的一行而不使用重复列.那么我应该使用的SQL语句语法是什么?

Tan*_*azi 16

默认情况下,如果您使用,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);
Run Code Online (Sandbox Code Playgroud)

  • 如果你感觉很懒,你可以从最大的表中获取所有列(在本例中为"A"),然后从其他表中添加你想要的任何列:`A.*,B.Supervisor_Name,B.Supervisor_Number,B*`. (9认同)

bha*_*atj 7

问题可以通过"USING"关键字来解决.

SELECT * from Family
   JOIN SUPERVISOR on ( Family.Supervisor_ID = SUPERVISOR.Supervisor_ID)
   JOIN CENTER on (SUPERVISOR.Center_ID = CENTER.Center_ID); 
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM FAMILY 
  JOIN (SUPERVISOR JOIN CENTER USING(Center_ID)) USING(Supervisor_ID);
Run Code Online (Sandbox Code Playgroud)

这一点很简单,如果你有两个表A(a,b)和B(b,c),那么在连接后以(a,b,c)的形式产生结果

Select *
    from A JOIN B USING(b);
Run Code Online (Sandbox Code Playgroud)

将为结果集提供三列(a,b,c)

注意:因为我不知道我们是否可以在使用中使用多个参数,因此我将其作为子查询.