您好我正在尝试在存储过程中使用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;
答案 0 :(得分: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
如果记录需要在两个表中,则使用第一个;如果你想在equiment中的记录在AssignEquiment中没有相关记录,则使用第二个。
答案 1 :(得分: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')