【问题标题】:copy data from 2 separate tables in postgresql从 postgresql 中的 2 个单独的表中复制数据
【发布时间】:2021-02-05 22:31:48
【问题描述】:

只是想知道是否可以在 postgresql 中一次从 2 个不同的表中提取数据

我有以下几点:

Blocks Table - 已按如下方式创建以适应模式,因此 JSON 信息已全部存储在每个包含 36 个多边形的信息列中

UUID (UUID) Name (TEXT) Type (TEXT) Information (TEXT)
815b2ce7-ce99-4d6c-b41a-bec512173f53 C2 Block 'stored JSON info'
7a9a03fc-8be6-47ca-b743-43715ebb5610 D2 Block 'stored JSON info'
9136dcda-2a55-4084-87c1-68ccde23aed8 E3 Block 'stored JSON info'

对于以后的查询,我需要知道每个多边形的几何形状,所以我使用将它们解析出来的代码创建了另一个表:

CREATE TABLE blockc2_ AS SELECT geom FROM (SELECT elem->>'type' AS type, elem->'properties' AS prop, elem->'geometry' AS geom FROM (SELECT json_array_elements(data) elem FROM block) f1)f2;

创建了一个最终表以仅显示几何图形(它将与已创建的 UID 相关联,如下所示

新表

UUID (UUID) Geometry (Geometry)
815b2ce7-ce99-4d6c-b41a-bec512173f53 01030000000100000005000000972E05A56D6851C084D91C434C6C32401C05D4886B6851C086D974FA4D6C324078F4DA916D6851C036BF7504766C3240F31D0CAE6F6851C035BF1D4D746C3240972E05A56D6851C084D91C434C6C3240
7a9a03fc-8be6-47ca-b743-43715ebb5610 01030000000100000005000000BB05694F726851C0CB2A87A8486C32403EDC3733706851C0CD2ADF5F4A6C32409ACB3E3C726851C07E10E069726C324017F56F58746851C07C1088B2706C3240BB05694F726851C0CB2A87A8486C3240
9136dcda-2a55-4084-87c1-68ccde23aed8 1030000000100000005000000972E05A56D6851C084D91C434C6C32401C05D4886B6851C086D974FA4D6C324078F4DA916D6851C036BF7504766C3240F31D0CAE6F6851C035BF1D4D746C3240972E05A56D6851C084D91C434C6C3240

理想情况下,我需要像下面这样的代码(如果可能的话),因为如果我单独插入它们,它们不会相互关联。而不是 3 行信息,它将是 6(3 个 UUIDS 和 3 个几何)

INSERT INTO new_table (uuid, geometry) SELECT UUID FROM blocks WHERE Name='C2' AND SELECT geometry FROM second_table WHERE Name='C2'

这样的事情可能吗?

【问题讨论】:

    标签: sql json postgresql


    【解决方案1】:

    创建表C(select * from table B union all select * from table A)

    【讨论】:

    • 谢谢,但这似乎对我不起作用。我创建了新表,因此我需要插入各个表中的各个列(块中的 UUID,second_table 中的几何)
    • 另外,我试过这个并得到错误 ERROR: UNION types uuid and text cannot be match
    【解决方案2】:

    听起来join

    INSERT INTO new_table (uuid, geometry)
        SELECT b.UUID, g.geometry
        FROM blocks b JOIN 
             geometry g
             USING (name)
        WHERE Name = 'C2'; 
    

    【讨论】:

    • 谢谢,我刚试过这个,不幸的是我可以使用连接,因为一列不存在于另一列中。错误:USING 子句中指定的列“block_id”在左表中不存在
    • @AmyOKeefe 。 . . block_id 不在USING 子句中,所以这个答案不会产生那个错误。
    • 我更改了您的建议以适合我的查询
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多