2016-06-22 4 views
0

Мои таблицы: Store (ID, Name), Orders (ID, StoreID), OrderItem (ID, Quantity, OrderID, ProductID).Неоднозначное название столбца после вставки внешнего выбора

Из приведенного ниже кода у меня есть Orders.ID, когда продукт 1 продает продукт 2. Теперь мне нужно обратиться к идентификатору магазина и получить имя магазина. Я застрял здесь.

Когда я пытаюсь добавить SELECT * FROM из приведенного ниже кода, у меня возникло неоднозначное имя столбца: OrderID.

Что мне делать?

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

Если какой-либо из ответов вам помог, отметьте его как ответ, чтобы вопрос можно было закрыть, а другие пользователи могут использовать его как ссылку! Не приложите много усилий с вашей стороны, не так ли? –

ответ

0

Джойн вы выполнили обеспечивает две таблицы А и В, оба из которых имеют столбец OrderID, поэтому SQL двигатель не может интерпретировать какие из столбцов для отображения, тем самым давая вам ошибку. Что вам нужно сделать, это выглядит следующим образом:

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

Когда столбец, используемый для объединения имеет то же имя в обеих таблицах, вы можете использовать USING clause, который не только экономит набирает, но и удаляет дубликаты столбца результат:

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; 
Смежные вопросы