【问题标题】:SQL Join using multiple tables使用多个表的 SQL 连接
【发布时间】:2024-05-23 10:30:02
【问题描述】:

我正在使用 Visual Studio 2017 附带的 SQL Server 版本,并尝试通过连接以下四个表中的列来创建视图:

表 1: Employee (EmpID, EmpName, EmpContact, EmpSalary)

Table2Customer (CustID, CustName, CustContact, CustEmail)

Table3Orders (OrderID, OrderCustID, OrderDate, OrderStatus, OrderValue)

Orders.OrderCustID 是与Customer.CustID 相关的外键

Table4Job (JobID, JobOrderID, JobEmpID, JobStatus, JobRemarks)

Job.JobOrderIDJob.JobEmpID 是两个外键,分别与 Orders.OrderIDEmployee.EmpID 相关。

现在,我想执行一个连接,它将按以下顺序显示 Orders 表的所有记录以及来自其他表的匹配项:

OrderID, JobStatus, OrderStatus, CustID, CustName, CustContact, CustDue, EmpID, EmpName, EmpContact, Oredrvalue

请有人帮我编写 SQL 查询来执行连接。非常感谢。

【问题讨论】:

  • 你搜索过 sql 并加入了吗?你发现了什么?
  • 这是一道作业题吗?展现自己的努力
  • @GuidoG:我已经用谷歌搜索过了,可以执行内部联接,其中一个表与两个或三个其他表联接。但在这种情况下,我遇到了困难,因为 Orders 表与 Customer 和 Job 连接,然后 Job 表与 Employee 连接。我不能在一个查询中写下整个事情。请指导我。
  • 然后开始向我们展示你已经拥有的东西

标签: sql-server join


【解决方案1】:

您需要遍历每个JOIN 以弄清楚在哪里加入。换句话说,您如何从员工到客户?这只是一个合乎逻辑的演练。

这是一种方法,使用内部连接(基本上是集合的大交集)。

SELECT OrderID, JobStatus, OrderStatus, CustID, CustName, CustContact, CustDue, EmpID, EmpName, EmpContact, OrderValue
FROM Job
INNER JOIN Orders
ON Orders.OrderId=Job.JobOrderID
INNER JOIN Customer
ON Customer.CustId=Orders.OrderCustId
INNER JOIN Employee
ON Employee.EmpId=Job.JobEmpID

【讨论】:

  • 非常感谢您向我展示了路径。我想通了并发布了答案。
【解决方案2】:

好的,我想通了,我把它贴在这里以供将来参考。

SELECT o.OrderID, j.JobStatus, o.OrderStatus, c.CustID, c.CustName, c.CustContact, c.CustDue, e.EmpID, e.EmpName, e.EmpContact, o.Oredrvalue FROM Orders o LEFT JOIN Customer c ON o.OrderCustID=c.CustID LEFT JOIN Job j ON o.OrderID=j.JobOrderID LEFT JOIN Employee e ON j.JobEmpID=e.EmpID

我在所有场合都执行了左连接,因为我需要 Orders 表中的所有记录。非常感谢所有回复的人。

【讨论】: