2016-11-04 32 views
0

所以我想學習一些MySQL,並且在Joins上得到了一點意見。這是在做我的頭。我不理解MySQL加入。我被卡住了

我有幾個練習,我正試圖通過,並沒有得到任何地方。

這樣做的這次訓練電話:

使用前的1994年的SQL語法(即不使用INNER JOIN語法)顯示訂單日期,訂單號和託運人的公司名稱訂單運往 葡萄牙。按訂單日期的升序對輸出進行排序。

我目前鍵入了:

SELECT OrderDate, OrderID, ShipperID FROM Shippers Orders 
WHERE shippers.shipperID = orders.shipperID AND orders.shipcountry = 'Portugal'; 

但我收到此錯誤信息: 錯誤代碼:在「字段列表」

1054未知列「訂購日期」我在做什麼錯?另外,我可以提供什麼幫助你們幫助我?

訂購日期是存在的,因爲你可以從我這裏截圖的「SELECT * FROM訂單」看到這裏 enter image description here

所以我想這是類似的,但具有不同的連接過程。

預先感謝您!

+0

列和表名在某些系統上可能區分大小寫,因此請嘗試使其匹配。也許你因此而犯錯誤? – tadman

+0

這是一個瘋狂的任務。無論如何,你錯過了一個逗號,這將導致一個表名成爲別名的別名 – Strawberry

+0

謝謝@Strawberry,我添加了逗號。我現在得到這個錯誤:錯誤代碼:1052。字段列表中的列'ShipperID'含糊不清 – purplemonkeydishwasher

回答

0

您必須使用具有列名的表名來標識哪個列屬於哪個表。

SELECT orders.OrderDate, orders.OrderID,shippers.ShipperID FROM Shippers, Orders 
WHERE shippers.shipperID = orders.shipperID AND orders.shipcountry = 'Portugal'; 

或者你可以別名,這將很容易地編寫查詢。

SELECT b.OrderDate, b.OrderID, a.ShipperID FROM Shippers a, Orders b 
    WHERE a.shipperID = b.shipperID AND b.shipcountry = 'Portugal'; 

希望這會有所幫助。

+0

」You不得不使用表名與列名「 - 應該更像是:」你必須使用帶有列引用的範圍變量引用「;我想你也指出,當你沒有明確指定一個範圍變量名時,那麼 – onedaywhen

+0

「你可以別名」 - 我想你已經提出了一個觀點,你可以指定一個範圍變量名來保存輸入(大概是更長的)默認參考,這個表的名字是 – onedaywhen

+0

「to確定哪個列屬於哪個表「 - 實際上,範圍變量引用了一個* row *。 – onedaywhen

0

你可以這樣使用。

SELECT o.OrderDate, o.OrderID, s.ShipperID FROM Shippers s, Orders o 
WHERE s.shipperID = o.shipperID AND o.shipcountry = 'Portugal'; 
0

Use the pre-1994 SQL syntax

聽起來培訓課程圍繞帶你很長的路要走(雖然日期是錯誤的,大概應該是1989年)!

這裏的教訓是,這樣做兩個表之間的關係的產品操作(又名CROSS JOIN使用的1992年來看,這仍然是外界的核心標準SQL),迫使你以消除歧義使用什麼形式<range variable reference>.<column reference> SQL的點合格引用否則會重複列參考(例如,在您的情況下,shipperID出現在兩個表中)。

我想最終的目的地是NATURAL JOIN,其中範圍變量的需要完全無需!