在 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_id
s.
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
;
如果您的编辑器无法帮助您确定列名,请考虑使用其他编辑器。
我正在尝试通过使用内部联接合并多个 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_id
s.
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
;
如果您的编辑器无法帮助您确定列名,请考虑使用其他编辑器。