【问题标题】:Postgres - CREATE TABLE FROM SELECTPostgres - 从选择创建表
【发布时间】:2014-05-22 02:50:03
【问题描述】:

我有两张表,其中一张包含大量 ID 和有关这些 ID 的信息。

我有第二张表Graph,它只有两列,每列多次包含上述 ID 号。我想 trim 我的 Info 表的大小,方法是只选择出现在我的图表中的那些 id 并创建一个新的更小的 Info 表。有没有一种简单的方法可以做到这一点?

CREATE TABLE FROM SELECT? 

谢谢!

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    很简单:

    create table new_table
    as 
    select t1.col1, t2.col2
    from some_table t1
       join t2 on t1.id = t2.some_id;
    

    您可以为此使用任何选择语句。新表的列名由查询中使用的列别名定义。

    手册中的更多详细信息:http://www.postgresql.org/docs/current/static/sql-createtableas.html

    【讨论】:

    • 谢谢! t1.col1 和 t2.col 中的 ID 号可以重复多次,这会影响表 1 吗?我不想要重复的 ID。 ID 字段标记为 PRIMARY SERIAL。谢谢!
    • @user2923767 如果您不想重复,则需要应用 DISTINCTGROUP BY - 就像使用任何常规查询一样。
    【解决方案2】:

    如果您只需要那些小表用于该会话,您可以创建 TEMP 表。你可以使用下面的查询来做到这一点。

      DROP TABLE IF EXISTS temp_table;
        CREATE TEMP TABLE temp_table AS
         SELECT 
           i.id as info_id, i.information as information
         FROM
          info i
          INNER JOIN graph g ON i.id = g.id;
    

    现在您可以将此 temp_table 用于函数中的下一个表。

                        OR 
    

    您也可以创建如下表(如果您不想将其创建为 TEMP):

    CREATE TABLE temp_table AS
         SELECT 
           i.id as info_id, i.information as information
         FROM
          info i
          INNER JOIN graph g ON i.id = g.id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2022-01-19
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多