复杂的不匹配记录查询

时间:2018-09-19 02:02:32

标签: sql ms-access

我有用户将记录提交到名为USERS的表中。为简化起见,这里有3个字段:ID,END TIME,VERSION。

我需要标识在USERS表中但未在MASTER表中列出的记录。但是,用户可以多次提交相同的ID。因此,然后我添加了检查不同的结束时间和版本号。这是我到目前为止的代码:

SELECT DISTINCT USER.ID, USER.EndTime, USER.Version
FROM [USER] LEFT JOIN MASTER ON USER.[ID] = MASTER.[ID]
WHERE (([MASTER.ID] Is Null OR [USER.ENDTIME] <> [MASTER.ENDTIME]));

示例用户表:

|---------------------|------------------|------------------|
|          ID         |     ENDTIME      |     VERSION      |
|---------------------|------------------|------------------|
|          11111      |9/18/18 6:16 PM   |          1       |
|---------------------|------------------|------------------|
|          11111      |9/18/18 6:20 PM   |          1       |
|---------------------|------------------|------------------|
|          11111      |9/18/18 6:23 PM   |          2       |
|---------------------|------------------|------------------|

主表示例:(我已经导入的记录)

|---------------------|------------------|------------------|
|          ID         |     ENDTIME      |     VERSION      |
|---------------------|------------------|------------------|
|          11111      |9/18/18 6:16 PM   |          1       |
|---------------------|------------------|------------------|
|          11111      |9/18/18 6:20 PM   |          1       |
|---------------------|------------------|------------------|

当我只想从下午6:23开始查看版本2记录时,使用上面的两个数据集和上面的SQL语句所有3条USER记录都将返回

如何为我的SQL语句添加更多条件,以确保以下所有条件将记录标识为新记录?

这是我需要的条件:

1)该ID存在于用户表中,但不存在于主表中。
2)两个表中都存在ID,但是结束时间不匹配,但版本号匹配。 3)两个表中都存在ID,并且版本号不匹配(这将确保结束时间也不匹配)。

我尝试了AND和OR的各种组合,但无法在所有情况下都能正常使用。有人可以提供一个示例来完成此操作吗?

1 个答案:

答案 0 :(得分:1)

尝试:

SELECT 
    USER.ID, USER.ENDTIME, USER.VERSION
FROM 
    [USER] 
LEFT JOIN 
    [MASTER] 
        ON (USER.ID = MASTER.ID AND USER.ENDTIME = MASTER.ENDTIME AND USER.VERSION = MASTER.VERSION)
WHERE 
    MASTER.ID Is Null