2016-06-22 10 views
0

Meine Tabellen sind Store (ID, Name), Bestellungen (ID, StoreID), OrderItem (ID, Menge, OrderID, ProductID).Mehrdeutiger Spaltenname nach Einfügung von außen Wählen Sie

Aus dem folgenden Code, ich habe die Orders.ID, wenn Produkt 1 Produkt 2 überspringt. Jetzt muss ich auf die Speicher-ID verweisen und den Namen des Geschäfts erhalten. Ich stecke hier fest.

Wenn ich versuche, SELECT * FROM den folgenden Code hinzufügen, habe ich Fehler mehrdeutigen Spaltennamen: OrderID.

Was soll ich tun?

SELECT OrderID as OID 
FROM 
(
    SELECT * 
    FROM OrderItem as OI 
    WHERE OI.ProductID = 1 
) AS A, 
(
    SELECT * 
    FROM OrderItem as OI 
    WHERE OI.ProductID = 2 
) AS B 
WHERE A.OrderID = B.OrderID AND A.Quantity > B.Quantity 
+0

Wenn eine der Antworten Ihnen geholfen hat, markieren Sie sie als eine Antwort, so dass die Frage geschlossen werden kann und andere Benutzer können dies als Referenz verwenden! Nehmen Sie sich nicht viel Mühe von Ihrem Ende, oder? –

Antwort

0

Die Join Sie ausgeführt bietet zwei Tabellen A und B, die beide die Säule mit OrderID, daher der SQL-Engine interpretieren konnte nicht, welche der Spalten angezeigt werden, damit Sie den Fehler geben. Was Sie tun müssen, ist wie folgt:

SELECT A.OrderID as OID 
FROM 
(
    SELECT * 
    FROM OrderItem as OI 
    WHERE OI.ProductID = 1 
) AS A, 
(
    SELECT * 
    FROM OrderItem as OI 
    WHERE OI.ProductID = 2 
) AS B 
WHERE A.OrderID = B.OrderID AND A.Quantity > B.Quantity 
0

Wenn die Spalte für ein benutztes beitreten den gleichen Namen in beiden Tabellen hat, können Sie die USING clause verwenden, das spart nicht nur eingeben, sondern entfernt auch die doppelte Spalte aus das Ergebnis:

SELECT OrderID as OID 
FROM 
(
    SELECT * 
    FROM OrderItem as OI 
    WHERE OI.ProductID = 1 
) AS A 
JOIN 
(
    SELECT * 
    FROM OrderItem as OI 
    WHERE OI.ProductID = 2 
) AS B 
USING (OrderID) 
WHERE A.Quantity > B.Quantity; 
Verwandte Themen