【问题标题】:MS Access multiple filter in the same field satisfying all of themMS Access 同一字段中的多个过滤器满足所有过滤器
【发布时间】:2020-09-17 12:08:06
【问题描述】:

我对访问还很陌生。我有一个类似于以下的表 enter image description here 我正在尝试创建一个查询,显示能够同时进行磨削和铣削的供应商。 这是我希望得到的结果

A    Grinding
A    Milling
B    Grinding
B    Milling 

并忽略其余部分。有什么帮助吗?

【问题讨论】:

    标签: sql database ms-access select where-clause


    【解决方案1】:

    你可以使用exists:

    select t.*
    from table1 t
    where
        t.capatibilty in ('Grinding', 'Milling')
        and exists (
            select 1
            from table1 t1
            where 
                t1.supplier = t.supplier 
                and t1.capatibilty in ('Grinding', 'Milling')
                and t1.capability <> t.capability
        )
    

    如果磨削和铣削是仅有的两个可能值,则可以稍微简化一下:

    select t.*
    from table1 t
    where
        exists (
            select 1
            from table1 t1
            where 
                t1.supplier = t.supplier 
                and t1.capability <> t.capability
        )
    

    【讨论】:

      【解决方案2】:

      如果你想返回所有的列,你可以使用EXISTS:

      select t.*
      from tablename as t
      where exists (
        select 1 from tablename
        where supplier = t.supplier and capability <> t.capability
      )
      

      或:

      select * from tablename
      where supplier in (
        select supplier from tablename
        group by supplier
        having count(*) = 2
      )
      

      【讨论】:

        【解决方案3】:

        如果您只想找出同时具备这两种能力的供应商,您可以像这样将自己的表连接起来:

        SELECT Table1.Supplier
        FROM Table1 INNER JOIN Table1 AS Table1_1 ON Table1.Supplier = Table1_1.Supplier
        WHERE Table1.Capability="Grinding" AND Table1_1.Capability="Milling"
        

        但是,您的结果将是:

        A
        B
        

        如果您想在单独的行中包含这些功能,那么您必须再次将表格链接到自身,如下所示:

        SELECT Table1.Supplier, Table1_2.Capability
        FROM (Table1 INNER JOIN Table1 AS Table1_1 ON Table1.Supplier = Table1_1.Supplier) 
        INNER JOIN Table1 AS Table1_2 ON Table1.Supplier = Table1_2.Supplier
        WHERE Table1.Capability="Grinding" AND Table1_1.Capability="Milling"
        

        你的结果将是:

        A   Milling
        A   Grinding
        B   Milling
        B   Grinding
        

        【讨论】:

        • 非常感谢您的回答。在我的表中,我有超过 200 种不同的能力;有没有办法可以询问我正在寻找哪些功能。再次非常感谢。
        • 如果您坚持寻找匹配 2 个功能的供应商,那么只需将 WHERE 子句替换为 WHERE Table1.Capability=[Capability1] AND Table1_1.Capability=[Capability2]
        猜你喜欢
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多