-3

您好,我正在尝试在存储过程中使用 OR 语句,但它没有按照我希望的方式工作......

该语句的第一部分执行得很好,但似乎在 OR 之后所说的内容被忽略了......我认为它们必须是另一个词来代替 OR?

希望我在这里听起来不会很愚蠢..

这是我的存储过程:

SELECT DISTINCT Equipment.EquipmentNo, Equipment.EquipmentDescription AS [Description], Equipment.Barcode, Equipment.SerialNo AS [Serial Number], Equipment.Status
FROM Equipment, AssignEquipment
WHERE (Equipment.Status = 'Open' AND Equipment.Assigned = 'No') OR AssignEquipment.Assigned = 'No'
AND Equipment.EquipmentNo = AssignEquipment.EquipmentNo;
4

2 回答 2

3

在 SQL Server 中,AND 优先于 OR。所以你写的相当于:

WHERE (Equipment.Status = 'Open' AND Equipment.Assigned = 'No') OR AssignEquipment.Assigned = 'No'

如果那是您想要的,那很好,但是您可能打算:

WHERE Equipment.Status = 'Open' AND (Equipment.Assigned = 'No' OR AssignEquipment.Assigned = 'No')

即使操作顺序是正确的,也不应该在不使用括号的情况下混合 AND 和 OR,因为这可以让代码的维护者知道您的意图并且这不是错误。

您还有一个可能是偶然的交叉连接问题。

所以而不是

FROM Equipment, AssignEquipment

你可能想要一个内连接或左连接

FROM Equipment E
JOIN AssignEquipment AE ON AE.EquipmentNo = E.EquimentNo

或者

FROM Equipment E
LEFT JOIN AssignEquipment AE ON AE.EquipmentNo = E.EquimentNo

如果记录需要在两个表中,请使用第一个,如果您希望设备中的记录在 AssignEquiment 中没有相关记录,请使用第二个。

于 2013-09-30T21:12:08.933 回答
0

你写的查询意味着条件是

 WHERE ( Equipment.Status = 'Open' AND Equipment.Assigned = 'No') OR  AssignEquipment.Assigned = 'No'

你需要把这样的条件放在括号里

WHERE Equipment.Status = 'Open' AND (Equipment.Assigned = 'No' OR AssignEquipment.Assigned = 'No')
于 2013-10-01T05:48:49.120 回答