2016-11-29 4 views
1

Ich versuche, eine Abfrage basierend auf dem Versuch zu erstellen, einen Wert in einer Spalte einer Tabelle basierend auf den Werten einer anderen Spalte in einer anderen Tabelle zu suchen. Dies ist der Code, den ich bisher geschrieben habe,Mehrdeutiger Spaltenname, obwohl Spaltenname und Tabelle deklariert sind?

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

Durch die Ausführung von Code, ich habe die OrderDetailID der Zeile in der OrderID Tabelle, wo die SupplierID in der Tabelle Artikel 5. Zum Beispiel ist finden möchte,

Highlighted Products Table

die SupplierID von „Queso Cabrales“ ist 5 und dessen ProductID ist 11. Diese in der Tabelle Orderdetail von 11 zur Fremdschlüssel entspricht, und daher möchte ich der Primärschlüssel dieser Zeile zurückgeführt werden. In diesem Fall 1.

Highlighted OrderDetails Table

Im Moment bekomme ich einen „mehrdeutiger Spaltennamen“ Fehler in der ersten Zeile, obwohl ich erklärt habe sowohl die Tabelle und die Spaltennamen. Auch, wie soll ich SQL bitten, die Daten bezüglich anderer Tabellen zu holen. Ich weiß, dass ich "INNER JOIN" verwenden soll, aber wie führe ich das aus, so dass der WHERE-Befehl verwendet werden kann.

+1

Du '' JOIN'ing OrderDetails' zu 'OrderDetails' auf' Products.ProductId'. Vielleicht wollten Sie stattdessen 'JOIN' auf' OrderDetails' und 'Products' setzen? – Siyual

Antwort

1

Sie haben OrderDetails zweimal in der FROM Klausel, aber keine Products. Ich glaube, Sie bedeuten:

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

Hinweise:

  • Tabellenaliasse die Abfrage einfacher zu schreiben und zu lesen (die od und p).
  • Verwenden Sie keine Begrenzer um numerische Konstanten. Ich nehme an, dass SupplierId eine Zahl ist, also habe ich die Anführungszeichen entfernt.
+1

Besonders wie der hinzugefügte Kommentar zum Entfernen von Anführungszeichen, wenn nicht notwendig. Möglichkeit, das ganze Problem anzugehen, nicht nur die Grundfrage. – xQbert

0

Sie zwei Mal die gleiche Spalte, so dass Sie die amvbiguity zB resove müssen: auf diese Weise (unter Verwendung von zwei verschiedenen Alias ​​OD1, OD2) doppelte

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

aber dann 'products.productID' würde scheitern: P wie' products.supplierID' Ich denke, dass sie Produkte einmal verwenden wollten. – xQbert

+0

Ich bin nicht in der Logik der Abfrage .. aber die Mehrdeutigkeit bezieht sich auf die Tatsache, dass die OP zwei Mal die gleiche Tabelle verwenden .. ohne richtigen Alias ​​.. – scaisEdge

0

Ein Problem ist, dass INNER JOIN entworfen wurde, zu erzeugen, Spalten im Ergebnis. Dieses Problem wurde im Jahr 1992, wenn der SQL-Standard eingeführt 'relational' Join-Typen gelöst, die doppelten Attribute nicht erzeugen:

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