我收到错误:
1052 - where子句中的'orderId'列是不明确的
尝试CALL GetOrderById(2000)
时
BEGIN
SELECT
hsorders.*,
hslineitem.partNum, hslineitem.price
FROM
hsorders
JOIN hslineitem ON hslineitem.orderId = hsorders.orderId
WHERE
orderId = orderId;
END
我需要传递Id
并从两个具有相同`orderId``的表中连接数据。
我做错了什么?
答案 0 :(得分:2)
您需要使用别名:
BEGIN
SELECT
hsorders.*,
hslineitem.partNum, hslineitem.price
FROM hsorders
JOIN hslineitem ON hslineitem.orderId = hsorders.orderId
WHERE
hsorders.orderId = p_orderId; -- I suggest to rename parameter to avoid
-- name collision
END
答案 1 :(得分:2)
您收到错误,因为两个表中都有orderid
。因此,SQL引擎不知道orderid
子句引用了哪个where
。
让我假设您有一个名为orderid
的参数或变量。
该名称与表中具有相同名称的列冲突。这就是我使用前缀的原因。例如,如果将orderid
作为参数传入,我将其命名为in_orderid
。如果它是局部变量,我可以使用v_orderid
。
然后代码看起来像这样:
BEGIN
SELECT o.*, li.partNum, li.price
FROM hsorders o JOIN
hslineitem li
ON li.orderId = o.orderId
WHERE o.orderId = v_orderId;
END;
请注意,我还添加了表别名,因此查询更容易编写和阅读。
答案 2 :(得分:1)
不明确表示在FIELD
之前使用表名或别名与where子句中的hsorders.orderId
类似。
答案 3 :(得分:1)
连接表时使用别名。如果列在两个表中,将有助于区分列。
BEGIN
SELECT
HO.*,
HL.partNum, HL.price
FROM
hsorders HO
JOIN hslineitem HL
ON HO.orderId = HL.orderId
END
您已使用ON子句提供HO.orderId = HL.orderId
所以你不必再使用where子句