加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 如何插入包含外键的行?

发布时间:2020-12-13 16:23:07 所属栏目:百科 来源:网络整理
导读:使用PostgreSQL v9.1.我有以下表格: CREATE TABLE foo( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,type VARCHAR(60) NOT NULL UNIQUE);CREATE TABLE bar( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,description VARCHAR(40) NOT NULL UNIQUE,foo_id BIGIN
使用PostgreSQL v9.1.我有以下表格:
CREATE TABLE foo
(
    id BIGSERIAL     NOT NULL UNIQUE PRIMARY KEY,type VARCHAR(60) NOT NULL UNIQUE
);

CREATE TABLE bar
(
    id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,description VARCHAR(40) NOT NULL UNIQUE,foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT
);

假设第一个表foo填充如下:

INSERT INTO foo (type) VALUES
    ( 'red' ),( 'green' ),( 'blue' );

有没有办法通过引用foo表轻松地将行插入到栏中?或者我必须分两步完成,首先查找我想要的foo类型,然后在栏中插入一个新行?

这是一个伪代码示例,显示了我希望可以完成的任务:

INSERT INTO bar (description,foo_id) VALUES
    ( 'testing',SELECT id from foo WHERE type='blue' ),( 'another row',SELECT id from foo WHERE type='red'  );
你的语法几乎是好的,在子查询周围需要一些括号,它会起作用:
INSERT INTO bar (description,(SELECT id from foo WHERE type='blue') ),(SELECT id from foo WHERE type='red' ) );

测试时间为SQL-Fiddle

另一种方法,如果要插入大量值,则使用较短的语法:

WITH ins (description,type) AS
( VALUES
    ( 'more testing','blue'),( 'yet another row','green' )
)  
INSERT INTO bar
   (description,foo_id) 
SELECT 
    ins.description,foo.id
FROM 
  foo JOIN ins
    ON ins.type = foo.type ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读