У меня есть три таблицы в БД доступа.
Labs (ID, TestLab)
Standards (ID, Standard, Keywords)
LabStd (ID, LabID, StdID)
В лаборатории много стандартов.До сегодняшнего дня все, что мне нужно было сделать, это сопоставить поисковую фразу с ключевым словом или стандартными столбцами в таблице Standards
.
Select Labs.ID, Labs.TestLab, Standards.standard
FROM Standards INNER JOIN (Labs INNER JOIN LabStd
ON Labs.ID = LabStd.LabID)
ON Standards.ID = LabStd.StdID
WHERE Standards.Keywords LIKE "%labstandard%"
OR Standards.standard LIKE "%labstandard%"
ORDER BY Labs.id, Standards.ID
Теперь, если в поиске используется знак плюс (labstandard1 + labstandard2) Мне нужно разбить строку и посмотреть, соответствует ли лаборатория всем стандартам поиска.Я считаю, что мне нужно использовать подзапрос для этого и пытался использовать несколько операторов WHERE IN
, но это не работает, поэтому я в растерянности.
В качестве теста я удалил операторы LIKE
ипросто пошел на равных.Следующий запрос не возвращает результатов, даже если для каждого из них существует соответствующий стандарт и лаборатория, связанная с обоими стандартами.
SELECT Labs.ID, Labs.TestLab, Standards.standard
FROM Standards INNER JOIN (Labs INNER JOIN LabStd
ON Labs.ID = LabStd.LabID)
ON Standards.ID = LabStd.StdID
WHERE LabStd.StdID IN
(SELECT ID AS StdID FROM Standards
WHERE (Standards.Keywords = 'labstandard1'
OR Standards.standard ='labstandard1')
)
AND LabStd.StdID IN
(SELECT ID as StdID
FROM Standards
WHERE (Standards.Keywords = 'labstandard2'
OR Standards.standard ='labstandard2')
)
ORDER BY Labs.id, Standards.ID
Надеюсь, я достаточно ясно объяснил, дайте мне знать, если мне нужно что-то уточнить.