我有三个表,每个表都有一个外键。当执行联接时,我得到重复的列。
给定
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语句语法?
默认情况下,如果使用MySQL,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);