SQL无法返回正确的值

问题描述 投票:0回答:1

我的桌子是:

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%")

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

mysql sql phpmyadmin
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.