SQL连接使用多个表

时间:2018-01-09 16:42:39

标签: sql-server join

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

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

表2 Customer (CustID, CustName, CustContact, CustEmail)

表3 Orders (OrderID, OrderCustID, OrderDate, OrderStatus, OrderValue)

Orders.OrderCustID是与Customer.CustID

相关的外键

表4 Job (JobID, JobOrderID, JobEmpID, JobStatus, JobRemarks)

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

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

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

有人请帮我写SQL Query来执行连接。非常感谢提前。

2 个答案:

答案 0 :(得分:0)

您需要遍历每个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

答案 1 :(得分:0)

好的,我想出来了,我将它发布在这里以供将来参考。

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表中的所有记录。非常感谢所有回复的人。