PostgreSQL INSERT其他表行作为属性

时间:2017-02-19 11:45:10

标签: postgresql

在PostgreSQL中,我有两个表

CREATE TABLE A (
    id int PRIMARY KEY,
    name varchar
);

CREATE TABLE B (
    id int PRIMARY KEY,
    a A,
    type varchar
);

如您所见,表B的属性类型之一是A.

首先,我使用以下查询在表A中插入一行

INSERT INTO A(id, name) VALUES(3241,'Item1');

然后,我需要在表B中插入一个新行。如何在表B中插入新行时在表A中选择一行,以用作属性值?

2 个答案:

答案 0 :(得分:1)

首先,这不是一个好主意。如果要组合两个表中的数据,则应使用常规引用,如下所示:

CREATE TABLE B (
    id int PRIMARY KEY,
    a_id int REFERENCES A(id),
    type varchar
);

尽管如此,它正式成为你想要的东西(但不推荐):

INSERT INTO B(id, A, type)
VALUES (1, (SELECT A FROM A WHERE id = 3241), 'some type');

SELECT * FROM B;

 id |      a       |   type    
----+--------------+-----------
  1 | (3241,Item1) | some type
(1 row)

答案 1 :(得分:0)

试试这个: -

INSERT INTO B (id,a,type) VALUES
    (123456,(SELECT A from A WHERE id=1234656), 'typeName' );