ms访问查询 - 从另一个查询中筛选出值

时间:2015-01-29 15:46:05

标签: sql ms-access

我有一个查询正在运行,它会提取我需要的记录。 我想运行另一个查询来提取所有其他记录(不包括第一个查询中的记录)。 我已经阅读了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);

2 个答案:

答案 0 :(得分:1)

你需要一个SubQuery。由于了解您的查询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);

答案 1 :(得分:0)

假设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
)

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