sql - 搜索查询中存在多个Where In?

标签 sql ms-access

我在 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/

相关文章:

mysql - 用于将一列与另一列进行比较的 SQL 查询

asp.net - (asp.net) 我的 sql 代码(更新语句)在数据库中有效,但在程序中无效

ms-access - 自更新到 Windows 7 以来,Access DB 中的更改未保存

sql - 在 SQL 查询中对月份名称进行排序

sql - 尴尬的 DAO 字符串操作问题

sql - 如何更新有外键限制的两个表的行

mysql - 在 MySQL 中使用 left Join 进行最佳拟合数据重试

c# - 查询生成器是否可以防止 SQL 注入(inject)?

vba - 从 Excel VBA 运行 Access 查询

ms-access - 在 MS-Access 中以编程方式隐藏列