【问题标题】:How to join multiple tables (more than 2) in SQL Server query? [closed]如何在 SQL Server 查询中连接多个表(超过 2 个)? [关闭]
【发布时间】:2020-07-16 20:12:47
【问题描述】:

我正在尝试加入 4 个表,其中一些表具有相关列(即 employeeIDcustomerID),但并非所有表都是相关的。

我的任务是创建一个视图,该视图返回 SalesRep 的名字和姓氏、佣金率、赚取的佣金,并按客户分组并按订单排序。

这是我目前拥有的代码,但出现错误

产品订单附近的语法不正确

代码:

CREATE VIEW salesRep5_vw
AS
    SELECT 
        e.firstName AS 'First Name', 
        e.lastName AS 'Last Name',
        sr.comissionRate AS 'Rate Of Comission',
        sr.comissionEarned AS 'Earned Comission',
        c.lastName AS 'Customer Last Name',
        po.orderID AS 'Customer's Related Order ID'
    FROM 
        Employee AS e
    JOIN
        SalesRep AS sr ON e.employeeID = sr.employeeID
    JOIN
        Customer AS c 
    JOIN
        ProductOrder AS po ON c.customerID = po.customerID

关于为什么这会引发错误的任何想法?我对此很陌生。

【问题讨论】:

  • 您的 join Customer as c 没有“ON”子句:应该类似于 Customer as c ON sr.employeeID = c.EmployeeID (或者他们共有的任何列,我只是在这里猜测)。
  • 另外,SELECT 中最后一列的列别名不好 - 如果名称中有单引号,则需要将包含的单引号加倍

标签: sql sql-server tsql join sql-view


【解决方案1】:

您的代码失败,因为它缺少customer 表的连接条件:

select ...
from Employee as e 
join SalesRep as sr on e.employeeID = sr.employeeID 
join Customer as c     --> here
join ProductOrder as po on c.customerID = po.customerID

你说:

一些表有相关的列 [...] 但不是所有的表都是相关的。

我对此表示怀疑。您必须仔细查看您的数据库结构才能了解客户表与其他表的关系。

据推测,您想要的订单与销售代表和客户有关,因此您可能正在寻找类似的东西:

select ...
from Employee as e 
join SalesRep as sr on e.employeeID = sr.employeeID 
join ProductOrder as po on po.salesrepID = sr.salesrepID
join Customer as c on c.customerID = po.customerID

【讨论】:

    【解决方案2】:

    用括号[]表示横向字符串:

    select e.firstName as [First Name],
           e.lastName as [Last Name],
           sr.comissionRate as [Rate Of Comission],
           sr.comissionEarned as [Earned Comission],
           c.lastName as [Customer Last Name],
           po.orderID as [Customer's Related Order ID]
    from Employee as e join 
         SalesRep as sr
         ON e.employeeID = sr.employeeID join 
         Customer as c          
         ON . . .  join
         ProductOrder as po
         on c.customerID = po.customerID
    

    另外,JOIN 将需要 ON 子句。一些JOINs 没有ON 子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多