我希望每个人都在这个临时表的名单,并包括电子邮件地址从这个其他表;如果没有电子邮件,则显示null。我也想看看他们各自的语言,如果可用;如果不是,则为空。
我不断得到更多的人,我认为是重复。
SELECT temp.*,
a.email_addr,
a.ibe_3103
FROM cigna_shared.tempoarytable temp
LEFT JOIN (
SELECT DISTINCT poli.account_number,
info.language, em.email_address
FROM policytable poli
LEFT JOIN languagetable info
ON poli.id = info.id
LEFT JOIN emailtable em
ON poli.KEY = em.KEY
) a
ON temp.memberid = a.account_number;
临时表中的总人数(76,815),我将获得85 K。我可以看到在poli表中有多个poli帐户号码,因此该电子邮件可以链接到3个poli帐户号码。我正试图弄清楚如何使它,使它所有的总数为76,815与添加的电子邮件地址和语言。
我在哪里导致了复制?
1条答案
按热度按时间js4nwp541#
我建议你需要-以某种方式-将row_number()的使用合并到你的子查询中,下面只是一个例子:
如果一个帐号有多行,而有些行是不需要的,则需要决定使用什么样的列值组合来确定使用哪些列值,哪些不使用。通过“partitioon by”和“order by”中的“over子句”来实现这一点(注:我上面使用的列引用只是一个猜测)。一旦分区/顺序逻辑对您来说是可接受的,那么通过连接条件只选择行号为1的行-因此您可以避免增加临时表的行数。
此外,最好仅在策略表(即,作为子查询),如果这是不需要的行的唯一来源的话。例如,假设策略表中有一个日期列,我们可以使用它来确定哪个策略是最新的。这样,我们从策略表中每个人只得到一行,例如: