asp.net - 尝试连接三个表时,SQL 查询不检索数据

标签 asp.net sql database sql-server-2008

这是我的 ERD,我的数据库包含三个表:

enter image description here

我想从这个表中检索数据,所以我写了以下查询:

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;

如果您希望在 OtherServiceServiceOrder 中至少有一行,则添加:

WHERE COALESCE(os.OrderID, so.OrderID) IS NOT NULL

关于asp.net - 尝试连接三个表时,SQL 查询不检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380795/

相关文章:

html - 下拉菜单不适用于 MasterPage

javascript - Ajax 调用无法从 Web api 服务获取返回消息

asp.net - 如何检查 Sitecore 项目是否使用别名

mysql - 根据mysql中的最低ID删除重复的电子邮件地址

javascript - 创建搜索函数以使用 'GET' 方法搜索 Sql 数据库

mysql - 有没有办法对计算值强制执行 MySQL CHECK 约束

asp.net - 当我将 'Enable 32-Bit Applications' 更改为 False 时,为什么我的 IIS 7 拒绝提供 css 或 js

mysql - SQL 多表 JOINS、GROUP BY 和 HAVING

java - 使用java同步不同服务器中的两个表的有效方法

mysql - LEFT JOIN 2 Table 但只会返回 Table2 中的第一条记录