首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在搜索查询中是否存在多个位置?

在搜索查询中是否存在多个位置?
EN

Stack Overflow用户
提问于 2012-02-22 06:03:26
回答 4查看 124关注 0票数 2

我在一个Access DB中有三个表。

代码语言:javascript
复制
Labs (ID, TestLab)
Standards (ID, Standard, Keywords)
LabStd (ID, LabID, StdID)

实验室有很多标准。在今天之前,我所需要做的就是将搜索短语与Standards表中的关键字或标准列进行匹配。

代码语言:javascript
复制
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。下面的查询不返回任何结果,即使每个标准都有匹配的标准,也有与这两个标准相关联的实验室。

代码语言:javascript
复制
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

我希望我已经解释得足够清楚了,如果我需要澄清什么,请告诉我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-23 00:20:26

最后一个查询的问题是,您要查找两个子集都有StdId的单个LabStd行,而这是不可能的。您想要的是找到这两个标准都存在的所有实验室。像这样的东西:

代码语言:javascript
复制
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' )
    )
票数 1
EN

Stack Overflow用户

发布于 2012-02-22 06:28:12

像这样的东西可能是,尽管standard.keywords建议这应该是一种类似于...

代码语言:javascript
复制
Select ID as StdID From Standards Where 
Standards.Keywords ='labstandard1' 
OR 
Standards.standard = "labstandard1"
OR
Standards.Keywords ='labstandard2' 
OR 
Standards.standard = "labstandard2"

然后使用All获取labstd

代码语言:javascript
复制
select LabStd.LabID 
Where StdId = all (Select ID as StdID From Standards Where 
Standards.Keywords ='labstandard1' 
OR 
Standards.standard = "labstandard1"
OR
Standards.Keywords ='labstandard2' 
OR 
Standards.standard = "labstandard2")

然后回到实验室。

像这样的查询会让你发疯。一定要从里到外把它们拆开,并确认零件。

票数 1
EN

Stack Overflow用户

发布于 2012-02-23 00:04:27

我已经找到了一个解决方案,尽管它非常丑陋。首先是一些数据。

代码语言:javascript
复制
**Standards**
ID      Standard        Keywords    
20      AAMA 505        Dry Shrinkage Thermal Cycling   
26      AAMA 614        High Perf. Organic Coatings on Plastic

**Labs**
ID      TestLab
10      TESTING, INC
21      LABORATORIES, INC.
3       FRESNO TESTING, INC.

**LabStd**
ID      LabID       StdID
283     3           20
284     10          20
285     21          20
291     21          26
299     10          26

下面是一个有效的查询。这将拉出实验室is 10和21,并省略3,这是正确的。

代码语言:javascript
复制
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 labs.testlab 
        FROM Standards INNER JOIN 
            (Labs INNER JOIN LabStd ON Labs.ID = LabStd.LabID) 
        ON Standards.ID = LabStd.StdID 
        WHERE standards.standard = "AAMA 505"
    ) 
AND Labs.TestLab IN 
    (
        SELECT labs.testlab 
        FROM Standards INNER JOIN 
            (Labs INNER JOIN LabStd ON Labs.ID = LabStd.LabID) 
        ON Standards.ID = LabStd.StdID 
        WHERE standards.standard = "AAMA 614"
    ) 
ORDER BY Labs.id, Standards.ID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9385928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档