重复与合并和 select 不同

Duplicates with merge and select distinct

我正在尝试使用合并进行更新和插入,但得到了重复项。我需要更新 table1 上的现有行或插入它(如果它不存在)。

表 1:

| col1    |   col2   |   userid  |  col3   |
|---------+----------+-----------+---------|
| string1 | string2  |   user1   | string8 |
| string1 | string4  |   user2   | string5 |
| string1 | string2  |   user3   | string7 |
| string1 | string2  |   user4   | string3 |

表 2:

| type |userid |
|------+-------|
|    a | user1 |
|    g | user1 | 
|    c | user2 |
|    d | user3 |
|    a | user4 | 
|    b | user5 |
|    b | user6 |
|    c | user6 |
|    e | user7 |

SQL:

MERGE INTO table1 t1
USING (SELECT DISTINCT 'string1' AS s1, 'string2' AS s2, userid, 'string3' AS s3
FROM table2 WHERE type in ('a','b','c','d')) src
ON (t1.userid = src.userid AND t1.col2 = src.s2)
WHEN MATCHED THEN 
    UPDATE SET t1.col3 = src.s3 where t1.col2 = 'string2'
WHEN NOT MATCHED THEN INSERT (col1, col2, userid, col3)
    VALUES (src.s1, src.s2, src.userid, src.s3);

结果:

|col1     |   col2   |   userid  |  col3   |
|---------|----------|-----------|---------|
| string1 | string2  |   user1   | string3 |
| string1 | string4  |   user2   | string5 |
| string1 | string2  |   user2   | string3 |
| string1 | string2  |   user3   | string3 |
| string1 | string2  |   user4   | string3 |
| string1 | string2  |   user5   | string3 |
| string1 | string2  |   user6   | string3 |
| string1 | string2  |   user6   | string3 |

如果我 运行 select 本身不同,我会得到没有重复的预期结果,但是当将它与合并一起使用时,我会得到 user6 的重复项,它在 t2 中有两行匹配 where条款。我也尝试使用 group by userid 而不是 distinct,但结果是一样的。

我该如何进行这项工作?

我没有得到任何重复项,我只是评论了更新语句中的 where 子句,因为它给我带来了错误。附上截图。

我运行检查结果的查询是有缺陷的。 SQL 正常工作。