我有一张约有5,000条记录的表格。我在这个表中创建了三个连接列。每列中的值不是唯一的。我希望通过这三列中的每一列连接到另一个表(按顺序),以返回给定条件的值。
连接表包含多个列。这些列中的三列是连接列,它们对应于第一个表'加入专栏。连接表中的连接列是唯一的。我想从连接表中获取值并将其带到第一个表中的新列。
我有一个代码,我已经从其他建议放在一起,它运行但我在返回表中收到超过800万条记录。我希望表只包含第一个表中的记录。
以下是代码:
CREATE TABLE current_condition_joined AS SELECT
a.id, a.geom, a.condition_join_1, a.condition_join_2, a.condition_join_3,
coalesce(b.condition, c.condition2, d.condition3) as current_condition,
coalesce(b.ecosite, c.ecosite2, d.ecosite3) as current_ecosite,
coalesce(b.ecophase, c.ecophase2, d.ecophase3) as current_ecophase,
coalesce(b.consite, c.consite2, d.consite3) as current_consite,
coalesce(b.conphase, c.conphase2, d.conphase3) as current_conphase
FROM current_condition a
LEFT JOIN boreal_mixedwood_labeled b ON a.condition_join_1 = b.label
LEFT JOIN boreal_mixedwood_labeled c ON a.condition_join_2 = c.label2
LEFT JOIN boreal_mixedwood_labeled d ON a.condition_join_3 = d.label3
WHERE b.condition != 'ERROR' and c.condition2 != 'ERROR';
如果条件不是ERROR,我想从第一个连接中获取值,否则如果条件不是ERROR则来自第二个连接的值,否则是第三个连接的值。
我环顾四周,但是所有的例子都要求稍微不同的东西,所以我不能把它拼凑起来。
这与以下问题不同:Nested Case statement type error (postgres) 问题是关于使嵌套声明工作的问题。这个问题是关于联接的工作原理。两个不同的问题,两个不同的帖子。
答案 0 :(得分:0)
尝试添加DISTINCT
。
CREATE TABLE current_condition_joined AS SELECT DISTINCT
a.id, a.geom, a.condition_join_1, a.condition_join_2, a.condition_join_3,
coalesce(b.condition, c.condition2, d.condition3) as current_condition,
coalesce(b.ecosite, c.ecosite2, d.ecosite3) as current_ecosite,
coalesce(b.ecophase, c.ecophase2, d.ecophase3) as current_ecophase,
coalesce(b.consite, c.consite2, d.consite3) as current_consite,
coalesce(b.conphase, c.conphase2, d.conphase3) as current_conphase
FROM current_condition a
LEFT JOIN boreal_mixedwood_labeled b ON a.condition_join_1 = b.label
LEFT JOIN boreal_mixedwood_labeled c ON a.condition_join_2 = c.label2
LEFT JOIN boreal_mixedwood_labeled d ON a.condition_join_3 = d.label3
WHERE b.condition != 'ERROR' and c.condition2 != 'ERROR';
您也可以尝试使用GROUP BY
。
答案 1 :(得分:0)
您提供的代码是我之前提出的问题:
但你打破了,将条件b.condition != 'ERROR'
和c.condition2 != 'ERROR'
移到WHERE
子句,这是完全错误的。考虑:
如果行相乘,那么您的连接条件很可能会识别多个匹配的行,相互相乘。如果我仍然拒绝提供boreal_mixedwood_labeled
的表格定义,就像我之前为您的问题重复提出的那样,很难诊断出来。