gpt4 book ai didi

postgresql - 使用具有相同主键的第三个表连接具有公共(public)字段的两个表

转载 作者:行者123 更新时间:2023-12-04 07:25:44 25 4
gpt4 key购买 nike

我正在尝试在 3 个表之间创建一个连接 2 个表共享大部分字段(只有几个不同) 我想知道如何创建这个连接,将公共(public)字段合并到一个列中/blank 不存在数据时不常见的那些。

table 1:

PK1 geom field 2 field 3 field 4 field 5
1 1-1 1-2 1-3 1-4 1-5
2 2-1 2-2 2-3 2-4 2-5
3 3-1 3-2 3-3 3-4 3-5
4 4-1 4-2 4-3 4-4 4-5
5 5-1 5-2 5-3 5-4 5-5

table a:

PK1 field 1ab field 2ab field 3ab field 4ab field 5a
1 1-1a 1-2a 1-3a 1-4a 1-5a
2 2-1a 2-2a 2-3a 2-4a 2-5a
3 3-1a 3-2a 3-3a 3-4a 3-5a
4 4-1a 4-2a 4-3a 4-4a 4-5a
5 5-1a 5-2a 5-3a 5-4a 5-5a


table b:

PK1 field 1ab field 2ab field 3ab field 4ab field 5b field 6b
6 1-1b 1-2b 1-3b 1-4b 1-5b 1-6b
7 2-1b 2-2b 2-3b 2-4b 2-5b 2-6b
8 3-1b 3-2b 3-3b 3-4b 3-5b 3-6b
9 4-1b 4-2b 4-3b 4-4b 4-5b 4-6b
10 5-1b 5-2b 5-3b 5-4b 5-5b 5-6b
结果表加入表 1 PK:
PK1  geom    field 2ab field 3ab field 4ab field 5a field 5b field 6b
1 1-1 1-2a 1-3a 1-4a 1-5a null null
2 2-1 1-2a 1-3a 1-4a 1-5a null null
3 3-1 1-2a 1-3a 1-4a 1-5a null null
4 4-1 1-2a 1-3a 1-4a 1-5a null null
5 5-1 1-2b 1-3b 1-4b null null null
6 6-1 1-2b 1-3b 1-4b null 1-5b 1-6b
7 7-1 1-2b 1-3b 1-4b null 1-5b 1-6b
8 8-1 1-2b 1-3b 1-4b null 1-5b 1-6b
9 9-11 1-2b 1-3b 1-4b null 1-5b 1-6b
我有匹配来获得所有带有内部连接的列,但我无法获得我正在寻找的结果,关于如何获得这个的任何想法?我在这里检查过,但找不到任何答案,我也尝试过合并但没有得到我期望的结果。
这是我获取每个表的所有字段的查询类型,因此有很多重复的字段。
SELECT t1.pk,
t2.field 1ab,
t2.field 1ab... t3.field 5b...
FROM table 1 t1
LEFT JOIN table b t2 ON t1.pk::text = t2.pk::text
LEFT JOIN ocod t3 ON t3.pk::text = t1.pk::text
GROUP BY
t1.pk,
t2.field 1ab,
t2.field 1ab...

最佳答案

我在这个上学到了一些东西。在您的示例中,我看不到表 t1 与所需结果的关系。期望的结果似乎只是 t2 和 t3 的组合。我从这个 Answer 得到了解决方案的内核它使用 NATURAL JOIN .
首先创建表:

BEGIN;
CREATE TABLE t1 (
PK1 text,
field_1 text,
field_2 text,
field_3 text,
field_4 text,
field_5 text
);

INSERT INTO t1 VALUES
('1', '1-1', '1-2', '1-3', '1-4', '1-5'),
('2', '2-1', '2-2', '2-3', '2-4', '2-5'),
('3', '3-1', '3-2', '3-3', '3-4', '3-5'),
('4', '4-1', '4-2', '4-3', '4-4', '4-5'),
('5', '5-1', '5-2', '5-3', '5-4', '5-5');

CREATE TABLE t2 (
PK1 text,
field_1ab text,
field_2ab text,
field_3ab text,
field_4ab text,
field_5a text
);

INSERT INTO t2 VALUES
('1', '1-1a', '1-2a', '1-3a', '1-4a', '1-5a'),
('2', '2-1a', '2-2a', '2-3a', '2-4a', '2-5a'),
('3', '3-1a', '3-2a', '3-3a', '3-4a', '3-5a'),
('4', '4-1a', '4-2a', '4-3a', '4-4a', '4-5a'),
('5', '5-1a', '5-2a', '5-3a', '5-4a', '5-5a');

CREATE TABLE t3 (
PK1 text,
field_1ab text,
field_2ab text,
field_3ab text,
field_4ab text,
field_5b text,
field_6b text
);

INSERT INTO t3 VALUES
('6', '1-1b', '1-2b', '1-3b', '1-4b', '1-5b', '1-6b'),
('7', '2-1b', '2-2b', '2-3b', '2-4b', '2-5b', '2-6b'),
('8', '3-1b', '3-2b', '3-3b', '3-4b', '3-5b', '3-6b'),
('9', '4-1b', '4-2b', '4-3b', '4-4b', '4-5b', '4-6b'),
('10', '5-1b', '5-2b', '5-3b', '5-4b', '5-5b', '5-6b');

COMMIT;
现在进行查询。看来,如果您执行 NATURAL FULL OUTER JOIN,PostgreSQL 将尝试组合尽可能多的列。
  SELECT *
FROM (t2 NATURAL FULL OUTER JOIN t3)
ORDER BY pk1::int
这使


PK1
field_1ab
field_2ab
field_3ab
field_4ab
字段_5a
字段_5b
字段_5b


1
1-1a
1-2a
1-3a
1-4a
1-5a
[空值]
[空值]

2
2-1a
2-2a
2-3a
2-4a
2-5a
[空值]
[空值]

3
3-1a
3-2a
3-3a
3-4a
3-5a
[空值]
[空值]

4
4-1a
4-2a
4-3a
4-4a
4-5a
[空值]
[空值]

5
5-1a
5-2a
5-3a
5-4a
5-5a
[空值]
[空值]

6
1-1b
1-2b
1-3b
1-4b
[空值]
1-5b
1-6b

7
2-1b
2-2b
2-3b
2-4b
[空值]
2-5b
2-6b

8
3-1b
3-2b
3-3b
3-4b
[空值]
3-5b
3-6b

9
4-1b
4-2b
4-3b
4-4b
[空值]
4-5b
4-6b

10
5-1b
5-2b
5-3b
5-4b
[空值]
5-5b
5-6b

关于postgresql - 使用具有相同主键的第三个表连接具有公共(public)字段的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68228062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com