psql - 将条目从另一个表

时间:2017-09-21 06:28:32

标签: sql sql-insert postgresql-9.3

如何将表格 foo 中的条目仅插入表格 waldo 中的comm_id,而其他列(托管,状态和类型)是否以静态值添加?

TABLE foo

     comm_id     |    managed    |    status    | type |
-----------------+---------------+--------------+------+
  COMM_11.21.6   |     true      |     NULL     | NULL |
  COMM_14.15.7   |     true      |     NULL     | NULL |
  COMM_13.03.9   |     true      |     NULL     | NULL |

TABLE waldo

     comm_id     |    address    |  stat_id  |
-----------------+---------------+-----------+
  COMM_10.10.6   |     12345     |     1     |
  COMM_14.15.7   |     78543     |     2     |

TABLE foo的所需输出

     comm_id     |    managed    |    status    | type |
-----------------+---------------+--------------+------+
  COMM_11.21.6   |     true      |     NULL     | NULL |
  COMM_14.15.7   |     true      |     NULL     | NULL |
  COMM_13.03.9   |     true      |     NULL     | NULL |
  COMM_10.10.6   |     true      |     NULL     | NULL |

值managed = true,status = NULL和type = NULL是静态的,所以我只想按值添加它们。并且 COMM_14.15.7 未添加到 foo ,因为该ID已存在。

INSERT INTO foo (comm_id, managed, status, type ) VALUES ('id from waldo', 'true', 'NULL', 'NULL' );

上面的查询将静态值插入表中。

INSERT INTO foo SELECT comm_id FROM waldo WHERE comm_id NOT IN (SELECT comm_id FROM foo);

有没有办法操纵或组合这些查询,这样我就可以将所有 comm_id 从waldo转换为foo并同时放置静态值?非常感谢您的建议和想法。

2 个答案:

答案 0 :(得分:1)

是吗

INSERT INTO foo (comm_id, managed, status, type ) 
select comm_id , true, NULL, NULL 
from waldo 
WHERE comm_id NOT IN (SELECT comm_id FROM foo);

注意我省略了boolean true和nulls的引号,这只是猜测不知道foo的结构

答案 1 :(得分:0)

试试这个:

INSERT INTO foo (com_id,managed,status,type)
select comm_id,'true',NULL,NULL from
(
SELECT comm_id FROM waldo 
minus
SELECT comm_id FROM foo
);