SQL未返回正确的值

时间:2020-04-10 19:37:04

标签: mysql sql

我的表格是:

Equipment table 
EquipmentID (pk) 
Type 
Make 
Model 
Damaged
Description

EquipmentLoan table 
EmployeeID
EquipmentID (fk Equipment.EquipmentID) 
Start 
End 
Current 

我试图返回设备ID,制造商,型号和设备描述

  • 未标记为已损坏
  • 当前未借出
  • 类型或说明中包含“视频”一词

但是,我当前拥有的代码:

SELECT Equipment.EquipmentID,Equipment.Make,Equipment.Model,Equipment.Description 
FROM Equipment 
INNER JOIN EquipmentLoan ON Equipment.EquipmentID=EquipmentLoan.EquipmentID 
WHERE Equipment.Damaged = 0 
AND EquipmentLoan.Current = 0 
AND (Equipment.Type LIKE "%video%" OR Equipment.Description LIKE "%video%")

当应该返回两个结果时,当前不返回任何结果。

但是,当我使用查询时:

SELECT e.EquipmentID, e.Make, e.Model, e.Description 
FROM Equipment e, EquipmentLoan l 
WHERE e.Damaged = 0 
AND l.Current = 0 
AND (e.Type LIKE "%video%" or e.Description LIKE "%video%")

返回正确的结果,以及不符合条件的其他结果。我不知道是什么问题。

1 个答案:

答案 0 :(得分:0)

您的查询仅返回在EquipmentLoan中具有匹配行且该行具有Current = 0的设备。如果您还希望设备根本没有匹配的行,则需要使用LEFT JOIN,而不是INNER JOIN。然后检查是否由于缺少匹配项而返回NULL

SELECT e.EquipmentID,e.Make,e.Model,e.Description 
FROM Equipment AS e
LEFT JOIN EquipmentLoan AS l ON e.EquipmentID=l.EquipmentID AND l.Current = 1
WHERE e.Damaged = 0 
AND (e.Type LIKE "%video%" OR e.Description LIKE "%video%")
AND l.EquipmentID IS NULL