SQL не возвращает правильные значения - PullRequest
0 голосов
/ 10 апреля 2020

Мои таблицы:

Equipment table 
EquipmentID (pk) 
Type 
Make 
Model 
Damaged
Description

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

Я пытаюсь вернуть идентификатор оборудования, марку, модель и описание оборудования, которое

  • не помечено как поврежденное
  • В данный момент не находится в аренде
  • У слова "video" в его типе или описании

Однако код, который у меня есть в настоящее время:

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 голосов
/ 10 апреля 2020

Ваш запрос возвращает только оборудование с соответствующей строкой в ​​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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...