我有用户将记录提交到名为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的各种组合,但无法在所有情况下都能正常使用。有人可以提供一个示例来完成此操作吗?
答案 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