【问题标题】:How to select all rows that are related to satisfied condition如何选择与满足条件相关的所有行
【发布时间】:2021-12-14 07:30:04
【问题描述】:

我什至不知道如何问我需要什么,所以我将在数据上演示:

我在 tblA 中有以下数据:

该查询需要生成 BMW 1 系与其他汽车发生事故的所有行,其中其他汽车也可能是 BMW 1 系。最终结果应如下所示:

每次事故都有一个参考编号“AccRef”,但事故涉及多辆汽车

谢谢

【问题讨论】:

    标签: sql ms-access inner-join


    【解决方案1】:

    这将查询BMW 1 SERIES 行的第一个需求:

    select * from ACCIDENTS where CarMake like '%BMW 1 SERIES%'

    然后您要选择具有相同AccRef 的相关行。
    为获得最佳性能,请在上述内部查询中的同一 AccRef 上使用 inner join

    select ACC.* from ACCIDENTS ACC
    inner join (
       select * from ACCIDENTS where CarMake like '%BMW 1 SERIES%'
    ) ACC_BMW 
    on ACC.AccRef = ACC_BMW.AccRef
    

    编辑:我使用名称表 ACCIDENTS 而不是您的 tblA

    【讨论】:

      【解决方案2】:

      也可以:

      SELECT
        *
      FROM accidents
      WHERE accref IN (
        SELECT
          accref
        FROM accidents
        WHERE carmaker ='BMW 1 SERIES'
      );
      

      【讨论】:

      • 可能会导致性能问题。我不会采用这种解决方案,就好像您有一个包含大量数据的大表一样,这可能是一场灾难。
      • 有些 DBMS 对 IN 谓词的处理很差,你说得对,@EpsilonTal,在这种情况下,我也恢复为 INNER JOIN - 但只有连接列而不是 * , 以确保没有任何未使用的内容被读取/实现。
      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多