在 Postgres 中的多个表上使用 INNER JOIN 的问题

Issue using INNER JOIN on multiple tables in Postgres

我正在尝试通过使用内部联接合并多个 table 来创建一个新的 table。所有 table 都有一个名为 reach_id 的主要 key/column。我有一个名为 q3_studies 的小学 table。我想要此 table 中的所有专栏。然后我有多个其他 table 具有 reach_id + another column。我想加入这个 table ON reach_id 匹配 q3_studies 但只包括其他列(所以我没有多余的 reach_id 列)。如果我 运行 从 SELECT * ... 开始使用最后的 LIMIT 1000;,我的第一次尝试似乎有效,但添加了多余的 reach_ids.

SELECT * FROM second_schema.q3_studies s
INNER JOIN second_schema.bs_trigger_q3 b ON s.reach_id = b.reach_id
INNER JOIN second_schema.mod_unmod_q3 m ON s.reach_id = m.reach_id LIMIT 1000;

我如何修改它以仅添加附加列(例如:bs_trigger_q3 有一个名为 bs_trigger 的附加列,mod_unmod_q3 有一个名为 mod_unmod 的附加列)?

其次,如果我尝试创建一个新的 table,我会得到一个错误:column reach_id specified more than one.我在这里做错了什么?

CREATE TABLE first_schema.report_q3 AS
SELECT * FROM second_schema.q3_studies s
INNER JOIN second_schema.bs_trigger_q3 b ON s.reach_id = b.reach_id
INNER JOIN second_schema.mod_unmod_q3 m ON s.reach_id = m.reach_id; 

而不是 select * 您需要明确列出您想要的列。这在任何情况下都是很好的做法。它还允许您重命名列,例如s.column_A as "foo_column"

将来架构可能会改变。

CREATE TABLE first_schema.report_q3 AS
SELECT 
  s.reach_id, 
  s.column_A, s.column_B, 
  b.column_C, b.column_D,
  m.column_E, m.column_F
FROM second_schema.q2_studies s
INNER JOIN second_schema.bs_trigger_q3 b ON s.reach_id = b.reach_id
INNER JOIN second_schema.mod_unmod_q3 m ON s.reach_id = m.reach_id
; 

如果您的编辑器无法帮助您确定列名,请考虑使用其他编辑器。