2017-03-27 23 views
1

IM兩個使用條款只是在做W3上一些SQL練習和琢磨一下下面的語句SQL,在一個聲明中

SELECT a.ord_no, a.purch_amt, b.cust_name, c.name, 
FROM orders a 
INNER JOIN customer b USING (customer_id) 
INNER JOIN salesman c USING (salesman_id) 

編輯:我貼錯了測試結果,通過回答ScaisEdge解釋的原因,聲明不工作。

+2

這是因爲列名的衝突可能會使用明確的避免,但很難說withouth的表結構 –

+0

可能是因爲與涉及兩個以上的表格,我們無法確定你的意思。 –

+0

所有列名在兩個表中都是唯一的嗎?否則,您可能需要使用'ON'來執行加入 –

回答

0

展望代碼

FROM orders a 
INNER JOIN customer b USING (customer_id) 
INNER JOIN salesman c USING (salesman_id) 

似乎using條款是ambigous當你使用超過2表 在你的情況下,第二使用是客戶或訂單..?

SQL引擎無法確定正確的,所以你必須在條款使用歧義

+0

是的,這是我的想法,但我覺得有趣的是,如果我交換他們中的任何一個,他會突然「知道」如何正確解釋其他USING子句。 (如說無論我換出) – Moorli

+0

交換內部聯接子句是在sql中是沒有意義的..在沒有第一個表和第二個表..交換不解決sql中的歧義.. sql不是程序..是一種聲明性語言..如果您使用多於兩個表,您必須使用顯式連接子句..或條件但不使用子句 – scaisEdge

+0

好吧,我只是再次測試它,它只適用於當第一個語句使用USING條款,但第二個必須是一個ON條款,我認爲這是完全有道理的,正是你所說的。不知怎的,在我的第一次測試中,我認爲它也是相反的(首先在第二個語句中使用USING),它不會,那是什麼讓我感到困惑。 – Moorli