基于复杂标准的SQL

基于复杂标准的SQL,sql,ms-access,Sql,Ms Access,我正在努力使用MS Access编写SQL语句,希望能得到任何帮助 我有一张桌子: *************************** * attr1 * attr2 * attr3 * *************************** * * A * 1 * * * B * 2 * * * B * 3 * * * C * 4 * *

我正在努力使用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     *
 ***************************
Select attr1, attr2, attr3
from table
where attr1 is not null 
      or attr3 not in (select attr3 from table where attr1 is not null)
因此,我需要在结果中包含attr1不为null的所有行,以及attr3具有与attr1不为null的行不同的值的所有其他行

在Access中,我可以这样做:在一个查询中选择attr1不为null的所有行;在一个查找不匹配查询中选择attr3中的所有值不包含在第一个查询中的行;然后将这两个查询合并。。。但如果可能的话,我需要一些更直接的方法来处理一条sql语句


多谢各位

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

 ***************************
 * attr1 * attr2 *  attr3  *
 ***************************
 *   B   *       *   1     *
 *   D   *       *   1     *
 *   A   *       *   2     *
 *       *  B    *   3     *
 *       *  C    *   4     *
 ***************************
Select attr1, attr2, attr3
from table
where attr1 is not null 
      or attr3 not in (select attr3 from table where attr1 is not null)

没问题,很高兴我能帮上忙:出于好奇,您是否看到与“不存在”有任何性能差异。。。从表格中选择y1.attr1、y1.attr2、y1.attr3作为y1,其中y1.attr1不为空或不存在。从表格中选择1作为y2,其中y2.attr3=y1.attr3和y2.attr1不为空。据我所知,这取决于在该实例中哪个更可读/更容易理解。