使用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 ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。