Найти несколько записей результатов в другой таблице - SQL - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть этот код:

select J.JobID, J.Barcode,J.Bsn, FL.RequirementStatus as OverallResult,S.Name as operation_name, 
FL.Occurred, R.Name as parameter_name,
FL.LowerTorqueLimit, FL.Torque, FL.UpperTorqueLimit,
FL.LowerAngleLimit, FL.Angle, FL.UpperAngleLimit
from FastenerLog FL 
inner join Stations S on FL.StationID=S.StationID
inner join Jobs J on J.JobID = FL.JobID
inner join JobTypes JT on J.JobTypeID=JT.JobTypeID
inner join Requirements R on R.RequirementID=FL.RequirementID
INNER join FastenerStatusEnum FS on FS.FastenerStatus=FL.FastenerStatus
where FL.FastenerStatus=1 and R.Name like '40%'
and FL.Occurred between '02-20-2020 00:00:00' and '02-22-2020 23:59:00'
order by J.Barcode, FL.Occurred desc

Это работает, и у меня такой результат: https://imgur.com/Re9Dvlo

Но я хочу добавить предложение в проверьте в другой таблице, когда штрих-код результата имеет operation_name T1XX-TR-OP60 (только для первых 9 строк, которые вы видите на рисунке).

псевдокод : ЕСЛИ operation_name = T1XX-TR-OP60, то проверьте, существует ли штрих-код в штрих-коде таблицы X. Потому что я не хочу показывать записи, если их нет в Таблице X (только для T1XX-TR-OP60).

Примечание : Если operation_name отличается от T1XX-TR-OP60 для этой записи ничего не произойдет, просто отобразите ее, как показано в данный момент.

1 Ответ

0 голосов
/ 23 февраля 2020

Если я правильно понимаю, должен помочь дополнительный коррелированный пункт where. Как то так:

select J.JobID, J.Barcode,J.Bsn, FL.RequirementStatus as OverallResult,S.Name as operation_name, 
FL.Occurred, R.Name as parameter_name,
FL.LowerTorqueLimit, FL.Torque, FL.UpperTorqueLimit,
FL.LowerAngleLimit, FL.Angle, FL.UpperAngleLimit
from FastenerLog FL 
inner join Stations S on FL.StationID=S.StationID
inner join Jobs J on J.JobID = FL.JobID
inner join JobTypes JT on J.JobTypeID=JT.JobTypeID
inner join Requirements R on R.RequirementID=FL.RequirementID
INNER join FastenerStatusEnum FS on FS.FastenerStatus=FL.FastenerStatus
where FL.FastenerStatus=1 and R.Name like '40%'
and FL.Occurred between '02-20-2020 00:00:00' and '02-22-2020 23:59:00'
and (s.name <> 'T1XX-TR-OP60' 
     or (s.name = 'T1XX-TR-OP60' and exists(select 1 from Table-X tx where tx.barcode = j.barcode))
)
order by J.Barcode, FL.Occurred desc
...