2016-11-29 56 views
1

我想創建一個基於試圖找到一個表中的一列中的值基於另一個表中另一列的值的查詢。這是迄今爲止我所編寫的代碼,儘管列名和表被聲明,但是列名不明確?

SELECT OrderDetails.OrderDetailID FROM OrderDetails 
INNER JOIN OrderDetails 
ON Products.ProductID = OrderDetails.ProductID 
WHERE Products.SupplierID="5"; 

通過執行的代碼,我想找到將訂單表中的行,其中供應商ID在Products表5。例如OrderDetailID,

Highlighted Products Table

「QUESO卡夫拉萊斯」的供應商ID是5和它的產品ID是11。這相當於在11桌的OrderDetail外鍵,所以我想返回該行的主鍵。在這種情況下,1

Highlighted OrderDetails Table

目前,我得到一個「不明確的列名」錯誤,即使我已經宣佈這兩個表和列名第一線。另外,我該如何讓SQL獲取有關其他表的數據。我知道我不想使用「INNER JOIN」,但我該如何執行,以便可以使用WHERE命令。

+1

你''JOIN'ing到OrderDetails''OrderDetails'上'Products.ProductId'。也許你打算在'OrderDetails'和'Products'上做'JOIN'而不是? – Siyual

回答

1

您在FROM條款中有兩次OrderDetails,但沒有Products。我想你的意思是:

SELECT od.OrderDetailID 
FROM OrderDetails od INNER JOIN 
    Products p 
    ON p.ProductID = od.ProductID 
WHERE p.SupplierID = 5; 

注:

  • 表的別名使查詢更容易編寫和讀取(在odp)。
  • 不要在數字常量周圍使用分隔符。我假設SupplierId是一個數字,所以我刪除了雙引號。
+1

特別喜歡關於刪除引號的補充評論,如果不必要的話。解決整個問題的方法,而不僅僅是基本問題。 – xQbert

0

使用兩個時間同一列,所以你必須resove的amvbiguity例如:這種方式(使用兩個不同的別名OD1,OD2)

SELECT od1.OrderDetailID FROM OrderDetails od1 
    INNER JOIN OrderDetails as od2 
    ON Products.ProductID = od2.ProductID 
    WHERE Products.SupplierID="5"; 
+0

但隨後'products.productID'會失敗:P爲會'products.supplierID'我認爲他們打算使用一次的產品。 – xQbert

+0

我不是在查詢的邏輯..但歧義是有關的事實,OP是使用兩個時間相同的表......沒有適當的別名.. – scaisEdge

0

一個問題是:INNER JOIN旨在生成重複結果中的列。此問題已得到解決1992年時,SQL標準的介紹,不產生重複的屬性「關係」的連接類型:

SELECT OrderDetailID 
    FROM OrderDetails 
     NATURAL JOIN Products 
WHERE SupplierID = 5;