【问题标题】:MySQL getting customer's name from order IDMySQL从订单ID中获取客户姓名
【发布时间】:2015-03-24 07:10:04
【问题描述】:

如果有两个表,我需要订单 ID 中的客户姓名。

客户:

ID     Name
1      Jamal Wang
2      Omar Jan

订单:

╔═══════╦══════════╦═══════╗
║  ID   ║ CUSTOMER ║ VALUE ║
╠═══════╬══════════╬═══════╣
║ 34656 ║        1 ║    20 ║
║ 37345 ║        2 ║    25 ║
║ 38220 ║        1 ║    15 ║
║ 39496 ║        1 ║    38 ║
║ 41752 ║        1 ║     9 ║
║ 43734 ║        2 ║    20 ║

当我从“订单”中获得客户 ID 时,我想获取客户名称

SELECT Name FROM `Customer` 
INNER JOIN `Order`
ON Customer.id = Order.customer.
WHERE Customer.id=1

但它返回同一个客户 4 次,因为我有 4 个订单。 我怎样才能使它不返回基于“订单”的客户,而是基于“客户”。 我需要订单 ID 中的客户姓名。 请帮忙。

【问题讨论】:

  • 只有两次?这应该会返回 4 次。
  • 当您有客户 ID 并且需要客户姓名时,为什么要使用“订单”加入。您不需要订单表中的任何内容。
  • 你应该修改过滤器:SELECT * FROM Customer INNER JOIN Order ON Customer.ID= Order.CUSTOMER WHERE Order.ID=37345 这给你一行
  • 当然它给了 4 次,因为客户 #1 有 4 个订单。
  • 如果你希望它只显示一次使用 { select distinct }

标签: mysql sql join


【解决方案1】:

如果您已经拥有客户 ID,则无需加入“订单”表。只需使用简单的选择:

SELECT Name FROM `Customer` 
WHERE ID=1

仅当您想根据订单 ID 获取客户名称时才应使用 join。

【讨论】:

    【解决方案2】:

    如前所述,在这个特定查询中,您根本不需要订单表。

    但是,如果您想保留现有查询并且只获得名称​​一次(这是您的问题),那么只需将 DISTINCT 关键字添加到您现有的查询中:

    SELECT DISTINCT name
    FROM customer
    INNER JOIN order ON customer.id = order.customer
    WHERE customer.id = 1;
    

    这是一个SQL Fiddle 示例。

    【讨论】:

    • 为什么会有人反对这个?我对他们提出的问题给出了有效的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2011-09-30
    • 2017-11-25
    • 2017-08-26
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多