这是我的 ERD,我的数据库包含三个表:
我想从这个表中检索数据,所以我写了以下查询:
SELECT [SrvcDate], [Order].OrderID, [EmployeeID], [CustID], [ComputerID]
FROM [Order], [OtherService], [ServiceOrder]
WHERE [Order].[OrderID]=[OtherService].[OrderID]
OR [Order].OrderID= [ServiceOrder].OrderID
但此查询仅在 [OtherService] 和 [ServiceOrder] 表都包含任何数据时才返回数据。但是如果其中一个表中没有数据,即使其他表包含一些数据,查询也不会检索数据。
例如,假设我在 [OtherService] 表中有几条记录,但我在 [ServiceOrder] 表中没有任何数据,这个查询应该包含 [OtherService] 表中的所有数据,对吗?但即使我在 [OtherService] 表中有记录,它也不会检索任何记录。这是为什么?
最佳答案
停止使用旧式连接,请使用模式前缀。您的查询应该是:
SELECT o.[SrvcDate], o.OrderID, o.[EmployeeID], o.[CustID], o.[ComputerID]
--, I assume some columns from OtherService / ServiceOrder
FROM dbo.[Order] AS o
LEFT OUTER JOIN dbo.[OtherService] AS os
ON os.OrderID = o.OrderID
LEFT OUTER JOIN dbo.[ServiceOrder] AS so
ON so.OrderID = o.OrderID;
如果您希望在 OtherService
或 ServiceOrder
中至少有一行,则添加:
WHERE COALESCE(os.OrderID, so.OrderID) IS NOT NULL
关于asp.net - 尝试连接三个表时,SQL 查询不检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380795/