【问题标题】:How to create SQL subquery ON JOIN using multiple tables如何使用多个表创建 SQL 子查询 ON JOIN
【发布时间】:2011-10-12 08:03:25
【问题描述】:

我有下表。

订购
订单号
客户编号
员工编号
订单日期

客户
客户编号
名称
地址

员工
员工编号
名称
地址

订单详情
订单号
数量
说明
价格

假设 ORDERDETAIL 表有 10 条记录

我想编写一个查询,它将从 ORDERDETAIL 表中返回 10 条记录,包括员工姓名、员工地址、客户姓名、客户地址和订单日期。

我知道我可以编写一个查询并使用 INNER JOIN 从 ORDER 表中获取信息,但是如何创建查询的其余部分以从 CUSTOMER 和 EMPLOYEE 表中获取信息。

SELECT * 
  FROM OrderDetail D 
       INNER JOIN Order O 
          ON D.OrderNumber = O.OrderNumber;

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    只需添加更多连接...

    SELECT *
    FROM OrderDetail D
    JOIN Order USING (OrderNumber)
    JOIN Customer USING (CustomerNumber)
    JOIN Employee USING (EmployeeNumber)
    

    您可能希望重新排序 JOIN 以便首先拥有最小的表,因为这可以为您提供一些性能提升(取决于您的服务器版本,最新版本将为您优化连接并可能实际执行以“可能是最好的”方式加入)。

    另外,至少在 MySQL 方言中,JOIN 隐式扩展为 INNER JOIN,并写作

    A JOIN B USING (COL)
    

    相当于写

    A JOIN B ON (A.COL = B.COL)
    

    【讨论】:

      【解决方案2】:
      SELECT * 
      FROM OrderDetail D 
      INNER JOIN Order O ON D.OrderNumber = O.OrderNumber
      INNER JOIN Eployee E on O.EployeeNumber = E.EployeeNumber
      INNER JOIN Customer C on O.CustomerNumber = C.CustomerNumber
      

      【讨论】:

      • 呃,选择要具体...虽然 select * 很好,但建议从特定表中指定要选择的特定列。
      • 如何向查询中添加条件语句,例如查找日期为“2011 年 10 月 10 日”的所有订单。OrderDate 字段位于 ORDER 表中。谢谢
      • SELECT * FROM OrderDetail D INNER JOIN Order O ON D.OrderNumber = O.OrderNumber INNER JOIN Eployee E on O.EployeeNumber = E.EployeeNumber INNER JOIN Customer C on O.CustomerNumber = C.CustomerNumber WHERE O.OrderDate = '10/10/2011'
      【解决方案3】:

      如果你之间有外键引用

      ORDER.EmployeeNumber and EMPLOYEE.EmployeeNumber
      ORDER.CustomerNumber and CUSTOMER.CustomerNumber
      

      那就试试这个

      SELECT 
            E.name AS employeeName, 
            E.Address AS employeeAddress,
            C.name AS customerName,
            C.Address AS customerAddress.
            O.OrderDate
      FROM OrderDetail D 
      INNER JOIN Order O ON D.OrderNumber = O.OrderNumber
      INNER JOIN EMPLOYEE E ON E.EmployeeNumber = 0.EmployeeNumber
      INNER JOIN CUSTOMER C ON C.CustomerNumber= 0.CustomerNumber 
      LIMIT 0,10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多