我收到一个错误:



尝试执行 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` 的两个表的数据。

我究竟做错了什么?

最佳答案

您收到错误是因为 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;

请注意,我还添加了表别名,以便查询更易于编写和阅读。

关于mysql - 如何修复过程中的 "ambiguous"where 子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49823049/

10-13 04:40