【问题标题】:Table join in MySQLMySQL中的表连接
【发布时间】:2021-05-29 03:39:01
【问题描述】:

我有两个要加入的表。

它们共享一个 orderNumber 的主键。

一张表名为“订单详情”,另一张表名为“订单”

我正在尝试从“orderdetails”表中查询 productCode、quantityOrdered、priceEach、orderLineNumber。

从“订单”表中,我需要状态和客户编号。

我遇到的问题是我需要找到具有 3 个特定 orderNumbers 的 3 条记录。

我可以查询我需要的所有数据,但我不能将其限制为 3 个特定的订单号……我卡住了。

我发布了 ERD 的链接

任何帮助都会很棒!

这是我试过的代码。

SELECT orderNumber
     ,  productCode
     , quantityOrdered
     , priceEach
     , orderLineNumber
     , orders.status
     , customerNumber 
  from orderdetails 
  join orders 
    on orderdetails.orderNumber = orders.orderNumber 
 where orderNumber =  (10330,10338,10194);

我不断收到 orderNumber is ambiguous 错误。

【问题讨论】:

  • 始终限定所有列引用,而不仅仅是其中的一部分。
  • 感谢您的帮助。我对 SQL 很陌生,你所说的限定所有列引用是什么意思?
  • 在上面的查询中,status 是一个正确限定列的示例
  • 我明白了。所以意思是orderDetails.productCode,orderdetails.priceEach ...等等n等等?

标签: mysql


【解决方案1】:
  1. 如果两个表中都存在 orderNumber - 或任何其他列 - 您应该在 SELECT 语句中指向其中一个表:

    选择订单.orderNumber

  2. 您的 WHERE 语句应使用 IN 关键字而不是 orderNumber = (value1, value2):

    WHERE orders.orderNumber IN (10330,10338,10194)

【讨论】:

  • 非常感谢您的帮助,这对我来说太陌生了,但我正在努力!!
【解决方案2】:

如果您必须从多个选项中进行选择,请使用 IN 子句。您的查询将是这样的:

SELECT OD.ORDERNUMBER
    , OD.PRODUCTCODE
    , OD.QUANTITYORDERED
    , OD.PRICEEACH
    , OD.ORDERLINENUMBER
    , O.STATUS
    , O.CUSTOMERNUMBER 
FROM ORDERDETAILS OD
INNER JOIN ORDERS O ON OD.ORDERNUMBER = O.ORDERNUMBER  
WHERE OD.ORDERNUMBER IN (10330,10338,10194);

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2019-06-30
    • 1970-01-01
    • 2016-07-08
    • 2023-01-26
    • 2014-01-06
    • 2011-06-14
    • 2011-09-22
    相关资源
    最近更新 更多