插入外部选择后的不明确的列名称

时间:2016-06-22 16:17:24

标签: sqlite ambiguous

我的表是商店(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 

2 个答案:

答案 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;