ms access query - 从另一个查询中过滤掉值

ms access query - Filter out values from another query

我有一个查询 运行ning 可以提取我需要的记录。 我想 运行 另一个查询来提取所有其他记录(不包括第一个查询中的记录)。 我已经阅读了 NOT IN 和 NOT LIKE,但似乎无法让它们发挥作用。

第一个查询被命名为:qryHunnersPatients

这是我目前拥有的第二个查询的代码:

现在这只是提取所有记录 - 但我想在 qryHunnersPatients 查询中排除这些记录

SELECT 
    tblPatientHistoryBaseline.ID, 
    tblPatientHistoryBaseline.Age, 
    [tblPatientHistoryBaseline].[Age]-[tblPatientHistoryBaseline].[UrinarySxBegan] AS Duration, 
    tblPatientHistoryBaseline.IBS, 
    tblQuestionnaires.UPOINTTotal, 
    tblQuestionnaires.U, 
    tblQuestionnaires.P, 
    tblQuestionnaires.O, 
    tblQuestionnaires.I, 
    tblQuestionnaires.N, 
    tblQuestionnaires.T, 
    tblQuestionnaires.ICSITotal, 
    tblQuestionnaires.ICPITotal
FROM 
    tblPatientHistoryBaseline 
    INNER JOIN 
    tblQuestionnaires 
    ON 
    (tblPatientHistoryBaseline.Visit = tblQuestionnaires.Visit) 
    AND 
    (tblPatientHistoryBaseline.ID = tblQuestionnaires.ID);

更新: 我刚刚使用以下代码尝试了 WHERE NOT EXISTS:

SELECT 
        tblPatientHistoryBaseline.ID, 
        tblPatientHistoryBaseline.Age, 
        [tblPatientHistoryBaseline].[Age]-[tblPatientHistoryBaseline].[UrinarySxBegan] AS Duration, 
        tblPatientHistoryBaseline.IBS, 
        tblQuestionnaires.UPOINTTotal, 
        tblQuestionnaires.U, 
        tblQuestionnaires.P, 
        tblQuestionnaires.O, 
        tblQuestionnaires.I, 
        tblQuestionnaires.N, 
        tblQuestionnaires.T, 
        tblQuestionnaires.ICSITotal, 
        tblQuestionnaires.ICPITotal
    FROM 
        tblPatientHistoryBaseline 
        INNER JOIN 
        tblQuestionnaires 
        ON 
        (tblPatientHistoryBaseline.Visit = tblQuestionnaires.Visit) 
        AND 
        (tblPatientHistoryBaseline.ID = tblQuestionnaires.ID)
   WHERE NOT EXISTS
            (SELECT ID
             FROM qryHunnersPatients AS hunners
             WHERE hunners.ID = tblPatientHistoryBaseline.ID);

假设 ID 是唯一的,您可以使用 WHERE NOT EXISTS:

SELECT {FieldList}
FROM tblPatientHistoryBaseline AS baseline
INNER JOIN tblQuestionnaires AS quest
  ON (baseline.Visit = quest.Visit) 
    AND (baseline.ID = quest.ID);    
WHERE NOT EXISTS (
  SELECT ID
  FROM qryHunnersPatients AS hunners
  WHERE hunners.ID = baseline.ID
)

您不必费心使用我添加的别名;为了便于阅读,我刚刚添加了它们。

您需要一个子查询。据了解,您的查询 qryHunnersPatients 为您提供了您不希望看到的记录列表,因此您需要将其包含在查询的 NOT IN 部分中。

SELECT 
    tblPatientHistoryBaseline.ID, 
    tblPatientHistoryBaseline.Age, 
    [tblPatientHistoryBaseline].[Age]-[tblPatientHistoryBaseline].[UrinarySxBegan] AS Duration, 
    tblPatientHistoryBaseline.IBS, 
    tblQuestionnaires.UPOINTTotal, 
    tblQuestionnaires.U, 
    tblQuestionnaires.P, 
    tblQuestionnaires.O, 
    tblQuestionnaires.I, 
    tblQuestionnaires.N, 
    tblQuestionnaires.T, 
    tblQuestionnaires.ICSITotal, 
    tblQuestionnaires.ICPITotal
FROM 
    tblPatientHistoryBaseline 
    INNER JOIN 
    tblQuestionnaires 
    ON 
    (tblPatientHistoryBaseline.Visit = tblQuestionnaires.Visit) 
    AND 
    (tblPatientHistoryBaseline.ID = tblQuestionnaires.ID)
WHERE
    tblPatientHistoryBaseline.ID 
    NOT IN 
    (SELECT qryHunnersPatients.ID FROM qryHunnersPatients);