我在 Access DB 中有三个表。
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
语句并直接使用 equals。即使每个标准都有匹配的标准以及与这两个标准关联的实验室,以下查询也不会返回任何结果。
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
我希望我解释得足够清楚,如果我需要澄清任何事情,请告诉我。
最佳答案
您最后一个查询的问题是您正在寻找单个 LabStd 行,其中 StdId 位于两个子集中,但这是不可能的。您想要的是找到存在这两个标准的所有实验室。像这样的事情:
SELECT
*
FROM
Labs
WHERE
EXISTS (
SELECT
1
FROM
LabStd INNER JOIN Standards ON LabStd.StdId = Standards.Id
WHERE
LabStd.LabId = Labs.Id
AND
( Standards.Standard = 'labstandard1' or Standards.Keywords = 'labstandard1' )
)
AND
EXISTS (
SELECT
1
FROM
LabStd INNER JOIN Standards ON LabStd.StdId = Standards.Id
WHERE
LabStd.LabId = Labs.Id
AND
( Standards.Standard = 'labstandard2' or Standards.Keywords = 'labstandard2' )
)
关于sql - 搜索查询中存在多个Where In?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385928/