【问题标题】:SQL based on complex criteria基于复杂标准的 SQL
【发布时间】:2015-04-29 14:02:27
【问题描述】:

我正在努力使用我试图在 MS Access 中编写的 SQL 语句,希望能提供任何帮助。

我有一张桌子:

 ***************************
 * attr1 * attr2 *  attr3  *
 ***************************
 *       *  A    *   1     *
 *       *  B    *   2     *
 *       *  B    *   3     *
 *       *  C    *   4     *
 *   B   *       *   1     *
 *   D   *       *   1     *
 *   A   *       *   2     *
 ***************************

我需要这样的结果:

 ***************************
 * attr1 * attr2 *  attr3  *
 ***************************
 *   B   *       *   1     *
 *   D   *       *   1     *
 *   A   *       *   2     *
 *       *  B    *   3     *
 *       *  C    *   4     *
 ***************************

因此,我的结果中需要 attr1 不为 null 的所有行,以及 attr3 具有与 attr1 不为 null 的行中的值不同的所有其他行。

我可以在 Access 中以一种方式执行此操作,即进行一个查询,其中我选择 attr1 不为空的所有行,而不是一个“查找不匹配”查询,其中我选择 attr3 中未包含在第一个查询中的所有行, 而不是合并这两个查询...但我需要一些更直接的方法(如果可能,一个 sql 语句)。

非常感谢!

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    我想你可能需要这样的东西:

    Select attr1, attr2, attr3
    from table
    where attr1 is not null 
          or attr3 not in (select attr3 from table where attr1 is not null)
    

    【讨论】:

    • 没问题很高兴我能帮上忙 :)
    • 出于好奇,您是否发现与NOT EXISTS 有任何性能差异? ...SELECT y1.attr1, y1.attr2, y1.attr3 FROM YourTable AS y1 WHERE y1.attr1 IS NOT Null OR NOT EXISTS (SELECT 1 FROM YourTable AS y2 WHERE y2.attr3=y1.attr3 AND y2.attr1 IS NOT Null)
    • 据我所知,我认为这取决于在那种情况下哪个对您来说更易读/更容易理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多