2014-05-14 115 views
4

我最近一直在为uni做很多MySql,我似乎无法弄清楚如何在同一个语句中两次从表中获取一个字段。 我的数据库是这样的:如何从同一个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) 
); 

我的目标是列出charterdate,目标,客户的详细信息(姓名,customerNo,地址,电话),以及所有章程的飞行员名字(名字,middleinitial,姓氏)。 我已经设法得到一切,但只有一名飞行员。我需要列出两个试点名称。

我GOOGLE了我的问题,但我似乎无法找到任何东西。

如果有人可以请指点我正确的方向,我将非常感激。

感谢 干杯 科瑞

+3

你能分享你所查询尝试到目前为止? – Mureinik

+0

可能与这个问题有关:http://stackoverflow.com/questions/23546773/sql-query-help-multiple-joins/23546915#23546915 –

回答

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 
+0

嗨,谢谢你的帮助,这是完美的。这让我难倒了好几天。再次感谢,Corey – Fishingfon

+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 
+0

这是完美的,谢谢,Corey – Fishingfon

1

你需要加入试点表两次查询。要做到这一点,您必须为您加入的每个Pilot表使用别名。

3

给别名为

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

请重新阅读这个问题,这不是他问的。 –

0

你可以简单地使用相同的列多次,并添加为他们每个人,并as,并使用不同的名称

SELECT column1 as c1, column1 as c2, column1 as c3 FROM TABLE1 WHERE .... 
相关问题