我的表是商店(ID,名称),订单(ID,StoreID),订单商品(ID,数量,订单ID,产品ID)。
从以下代码中,当产品1超过产品2时,我获得了Orders.ID。 现在我需要参考商店ID并获取商店的名称。我被困在这里。
当我尝试从下面的代码添加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)
您执行的连接提供了两个表A和B,它们都具有列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
答案 1 :(得分: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;