【发布时间】:2021-05-19 01:29:13
【问题描述】:
我需要从多个来源收集一些客户数据并删除重复的 ID,同时维护其他列中的值并保留显示客户来自哪里的列中的 True 值(它可以来自多个资源)。我在为此创建一个 sql 查询时遇到了一些麻烦。我已经尝试过合并功能,但查询持续了将近 1 小时才能完成(约 4000 万行)。
例子:
来源 1:
| Name | ClientID | Source1 | Source2 | Source3 |
|---|---|---|---|---|
| Name1 | 123 | False | True | False |
来源 2:
| Name | ClientID | Source1 | Source2 | Source3 |
|---|---|---|---|---|
| Name2 | 123 | True | False | False |
需要的结果:
| Name | ClientID | Source1 | Source2 | Source3 |
|---|---|---|---|---|
| Name1 or Name 2 | 123 | True | True | False |
我的代码:
WITH ids AS (
SELECT id FROM source1
UNION
SELECT id FROM source2
UNION
SELECT id FROM source3
)
SELECT
COALESCE(s1.name, s2.name, s3.name) AS name,
id AS clientid,
CASE WHEN s1.id IS NULL THEN False ELSE True END AS source1,
CASE WHEN s2.id IS NULL THEN False ELSE True END AS source2,
CASE WHEN s3.id IS NULL THEN False ELSE True END AS source3
FROM ids i
LEFT JOIN source1 s1 ON i.id = s1.id
LEFT JOIN source2 s2 ON i.id = s2.id
LEFT JOIN source3 s3 ON i.id = s3.id
【问题讨论】:
-
您的示例数据没有名为
id的列。 -
如果您在索引方面需要任何帮助,您必须提供估算计划。
-
@GordonLinoff,这是 ClientID 列,抱歉。