如何从同一个mysql表中选择两次列?

时间:2014-05-14 06:20:22

标签: mysql sql

我最近为uni做了很多MySql,我似乎无法弄清楚如何在同一个语句中两次从一个表中获取一个字段。 我的数据库是:

drop database if exists AIRLINE;
create database AIRLINE;
use AIRLINE;



CREATE TABLE AIRCRAFT
(
    AircraftNo INT(20) NOT NULL,
    AircraftType VARCHAR(100) NOT NULL, 
    FuelBurn VARCHAR(100) NOT NULL, 
    Airspeed VARCHAR(100) NULL, 
    LastInspection DATE NULL, 
    TotalFlyingTime INT(50) NOT NULL, 
    TotalTimeLeftEngine INT(50) NULL, 
    TotalTimeRightEngine INT(50) NULL,

    PRIMARY KEY (AircraftNo)
);

CREATE TABLE PILOT
(
    PilotCode INT(20) NOT NULL, 
    LastName VARCHAR(100) NOT NULL, 
    FirstName VARCHAR(100) NOT NULL, 
    MiddleInitial VARCHAR(50) NULL, 
    HiredDate DATE NULL, 
    BasePay VARCHAR(50) NULL, 
    Dependents VARCHAR(100) NULL, 
    License INT(50) NOT NULL,
    TotalHours INT(50) NOT NULL,

    PRIMARY KEY (PilotCode)
);

CREATE TABLE CUSTOMER
(
    CustomerNo INT(20) NOT NULL,
    Name VARCHAR(100) NOT NULL, 
    Contact INT(50) NOT NULL, 
    Phone INT(50) NOT NULL, 
    Street VARCHAR(100) NULL, 
    Suburb VARCHAR(100) NULL, 
    State VARCHAR(100) NULL, 
    Postcode INT(20) NULL, 
    Balance INT(50) NULL,

    PRIMARY KEY (CustomerNo)

);

CREATE TABLE CHARTER
(
    TripTicket INT(50) NOT NULL AUTO_INCREMENT, 
    CharterDate DATE NOT NULL, 
    PilotCode INT(20) NOT NULL, 
    CopilotCode INT(20) NULL, 
    AircraftNo INT(20) NOT NULL, 
    Destination VARCHAR(100) NOT NULL, 
    Distance INT(20) NULL, 
    HoursFlow INT(20) NULL, 
    HoursWating INT(20) NULL, 
    Fuel INT(20) NULL, 
    Oil INT(20) NULL, 
    CustomerNo INT(20) NOT NULL,

    PRIMARY KEY (TripTicket),

    FOREIGN KEY(PilotCode) REFERENCES PILOT(PilotCode),
    FOREIGN KEY(CopilotCode) REFERENCES PILOT(PilotCode),
    FOREIGN KEY(AircraftNo) REFERENCES AIRCRAFT(AircraftNo),
    FOREIGN KEY(CustomerNo) REFERENCES CUSTOMER(CustomerNo)
);

我的目标是列出所有章程的章程,目的地,客户详细信息(姓名,customerNo,地址,电话)和飞行员名称(名字,初始名称,姓名)。 我设法得到了一切,但只有一名飞行员。我需要列出两个飞行员名字。

我搜索了我的问题,但我似乎找不到任何东西。

如果有人能指出我正确的方向,我将非常感激。

由于 干杯 科里

5 个答案:

答案 0 :(得分:4)

您需要使用不同的别名JOIN两次。

类似的东西:

SELECT p1.lastname, p2.lastname, /* other fields */
  FROM CHARTER c
  JOIN PILOT p1 ON p1.PilotCode = c.PilotCode
  JOIN PILOT p2 on p2.PilotCode = c.CoPilotCode

答案 1 :(得分:2)

将别名命名为

 SELECT a.columname1 AS 1, a.columname1 AS 2
   FROM tablename a

答案 2 :(得分:1)

您必须在联接中使用表别名:

SELECT MainPilot.LastName, CoPilot.LastName FROM CHARTER 
LEFT JOIN PILOT MainPilot ON MainPilot.PilotCode=CHARTER.PilotCode
LEFT JOIN PILOT CoPilot ON CoPilot.PilotCode=CHARTER.CoPilotCode

答案 3 :(得分:1)

您需要在查询中两次加入试用表。为此,您必须为您加入的每个Pilot表使用别名。

答案 4 :(得分:0)

您可以多次使用同一列并为每个列添加as并使用不同的名称

SELECT column1 as c1, column1 as c2, column1 as c3 FROM TABLE1 WHERE ....