【发布时间】:2021-05-07 04:18:24
【问题描述】:
我有两张桌子(T1 和 T2)
-首先,我从T1 中选择V1、V2、V3 和V4,并使用row_number() 函数根据V1 和V2 列删除重复项。
-其次,我从T2中选择V1、V2、V3和V4并使用row_number()函数根据V1和V2列删除重复项。
-第三,我用UNION把这两张表叠起来。
(WITH cte1 AS(
SELECT v1, v2, v3, v4,
row_number()over (PARTITION BY V1, V2 ORDER BY V1) rn
FROM T1)
SELECT V1, V2, V3, V4
FROM cte1 WHERE rn=1)
UNION
(WITH cte2 AS(
SELECT v1, v2, v3, v4,
row_number()over (PARTITION BY V1, V2 ORDER BY V1) rn
FROM T2)
SELECT V1, V2, V3, V4
FROM cte2 WHERE rn=1)
现在我的问题是:如何使用 V1、V2 和 V3 列从上面的最终堆叠表中删除重复项?
注意:如果最终堆叠表中有重复项,那么我需要删除 V4=NULL 的记录。但是,如果最终堆叠表中不存在重复项,我仍然需要保留 V4=NULL 的记录。
【问题讨论】:
-
用您正在使用的数据库标记您的问题。你想要
v4的值是多少? -
这里不需要V4。
-
只需从
select列表中删除V4。它未使用,您需要消除UNION实际执行的其他列上的重复项。我想这就是@GordonLinoff 的意义所在。 -
我在最终结果中实际上需要 V4。
-
如果您在最终结果中确实需要 V4,请转到 Gordon 的评论之一。你想如何计算它的价值?您已经为
T1和T2完成了此操作:首先,我从 T1 中选择 V1、V2、V3 和 V4,并根据 V1 和 V2 删除重复项。为什么你不能这样做?
标签: mysql sql duplicates union