2017-11-19 8 views
0

"sqllite3"を学び始めています。私は理解できなかった問題に直面しました。インナー2列2列のテーブルを同じIDにする

私は、これらのテーブルに

Schema

を持っていると私は、各乗客の 次の日付を選択します: 名前、性別、年齢、チケット、運賃、原点ポートと宛先ポートを。 しかし、発信元ポートと宛先ポートでは、番号ではなくポート名を表示します。 私はポート以外のすべてのデータを表示するように管理しました。私は別名を使用する必要があるが、方法はわかりません。 誰でもお手伝いできますか?

select Passengers.Passengerid as "PassengerId", Classes.Class_Name as 
"Passenger_Class", Passengers.Name, Passengers.Sex,Passengers.Age, 
Travels.Ticket,Travels.Fare, Ports.Port_ID as "Embarked",Ports.Port_ID as 
"Destination" from Passengers 
inner join Travels on Passengers.Passengerid = Travels.Passengerid 
inner join Travel_Options on Travels.Travel_ID = Travel_Options.Travel_ID 
inner join Ports on Travel_Options.Origin_Port_ID = Ports.Port_ID 
inner join Ports on Travel_Options.Destination_ID = Ports.Port_ID 
inner join Classes on Travel_Options.Class_ID = Classes.Class_ID; 
+0

は、内部ポートはp2'として 'p2'を使用する内部結合p1'と'ポートに参加 'のように同じ名前のテーブルに別のエイリアスを与える:実際には、私はすべてのあなたのテーブルのための表の別名をお勧めします'p1.Ports.Port_ID'列のテーブル名である場合' p2.whatevercolumn' –

+0

'Travel_Options.Origin_Port_ID = Ports.Port_ID' becames' Travel_Options.Origin_Port_ID = p1.Port_ID' ... –

答えて

2

テーブルには別のエイリアスが必要です。

select p.Passengerid, c.Class_Name as Passenger_Class, 
     p.Name, p.Sex, p.Age, 
     t.Ticket, t.Fare, po.port_name as Embarked, pd.port_name as Destination 
from Passengers p inner join 
    Travels t 
    on p.Passengerid = t.Passengerid inner join 
    Travel_Options o 
    on t.Travel_ID = o.Travel_ID inner join 
    Ports po 
    on o.Origin_Port_ID = po.Port_ID inner join 
    Ports pd 
    on o.Destination_ID = pd.Port_ID inner join 
    Classes c 
    on o.Class_ID = c.Class_ID; 
関連する問題