2014-09-03 32 views
1

我有Access中的记录列表。我试图通过另一组值[B]的条件过滤一组值[A]。我想检索值[A],其中相应的值[B]是某个值,并过滤掉任何值[A] s,其中存在除特定值[B]以外的任何记录。从一个列表中删除值,如果它们出现在另一个列表中

例如,我可能想要检索[A],其中[B]的唯一值是'5'。如果[A]有两个记录具有相同的值,那么[B]值为'5'且一个具有[B]值为'7'的记录应被排除。如果两个记录存在[A]的相同值,并且[B]的值均为'5',则应包含它们。

在下面的列表中,我可能想要检索所有[B]值等于65的[A]值。所以我希望查询返回TFL,但不是MCA,即使它有65,因为它也有一个非65(72)。

A | B

MCA | 65

MCA | 72

TFL | 65

PKO | 72

PKO | 89

我已经得到了一个具有特定值的[A] s的列表,以及具有任何其他值的[A] s的列表[B]。我想我可以从第一个列表中取出出现在第二个列表中的任何值[A]。在上面的例子中,如果我用'65'过滤,第一个列表将包含'MCA'和'TFL',第二个列表将包含'MCA'和'PKO';如果我从第一个列表中拿出出现在第二个列表中的值,我只剩下'TFL',这正是我想要的。但是,我不知道如何从一个列表中减去出现在另一个列表中的任何值。

任何想法?

回答

0

你提供你想要什么一个很好的说明,我们只是需要把它翻译成SQL

SELECT A FROM AndysData WHERE B=65 

会给你所有的A的名单,其中至少一个B值为65 。

SELECT A FROM AndysData WHERE B<>65 

会给你一个列表中的所有A的有B值不是65

要排除第二批第一个可以用NOT IN子句和子查询完成:

SELECT DISTINCT A FROM AndysData 
WHERE 
    B=65 
    AND 
    A NOT IN (SELECT A FROM AndysData WHERE B<>65) 
+0

完美;谢谢! – andylaw31 2014-09-03 15:47:54

相关问题