【发布时间】:2016-05-26 08:46:47
【问题描述】:
我有这样的设置
CREATE TABLE Mother (
id SERIAL PRIMARY KEY
);
CREATE TABLE Kitten (
id SERIAL PRIMARY KEY AUTO_INCREMENT,
mother_id INTEGER NULL REFERENCES Mother
);
Kitten 表已填满,其中一些提到了母亲,但有些没有。表格可能如下所示:
== Mother ==
| 1 |
| 2 |
== Kitten ==
| 1 | NULL |
| 2 | 1 |
| 3 | NULL |
| 4 | 2 |
| 5 | 1 |
| 6 | NULL |
现在(由于一些要求的变化)每只小猫都必须有一个刚刚创建的母亲。我尝试了以下不起作用。
UPDATE Kitten
SET mother_id = (
INSERT INTO Mother DEFAULT VALUES RETURNING id
)
WHERE mother_id IS NULL;
错误是
Fehler in der SQL-Abfrage: ERROR: syntax error at or near "INTO"
LINE 3: INSERT INTO Mother DEFAULT VALUES RETURNING id
使用 PosgreSQL 9.3.5
Auto-increment-Comment:“serial”和“primary key”的组合默认开启auto-increment
这里是创建描述的数据库状态的 sql:
drop table if exists Kitten;
drop table if exists Mother;
CREATE TABLE Mother (
id SERIAL PRIMARY KEY
);
CREATE TABLE Kitten (
id SERIAL PRIMARY KEY,
mother_id INTEGER NULL REFERENCES Mother
);
insert into Mother default values;
insert into Mother default values;
insert into Kitten (mother_id) values (NULL);
insert into Kitten (mother_id) values (1);
insert into Kitten (mother_id) values (NULL);
insert into Kitten (mother_id) values (2);
INSERT INTO Kitten (mother_id) VALUES (1);
INSERT INTO Kitten (mother_id) VALUES (NULL);
【问题讨论】:
-
您想为每只没有幼猫的小猫创建一个新妈妈吗? (所以根据您的样本数据有 2 个新妈妈),或者 只有一个 用于两只孤儿小猫的妈妈(这是您尝试使用的语法所建议的)
-
是的,每只小猫都有一个新妈妈
标签: sql postgresql sql-update sql-insert