重复与合并和 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 正常工作。
我正在尝试使用合并进行更新和插入,但得到了重复项。我需要更新 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 正常工作。