如果它们出现在另一个列表中,则从一个列表中删

时间:2014-09-03 14:29:51

标签: ms-access access-vba ms-access-2010

我在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 |乙

MCA | 65

MCA | 72

TFL | 65

PKO | 72

PKO | 89

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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)