Ich habe eine Einstellung wie dieseSQL UPDATE mit automatischer INSERT
CREATE TABLE Mother (
id SERIAL PRIMARY KEY
);
CREATE TABLE Kitten (
id SERIAL PRIMARY KEY AUTO_INCREMENT,
mother_id INTEGER NULL REFERENCES Mother
);
Die Kitten Tabelle gefüllt ist, und einige von ihnen auf eine Mutter einen Verweis haben aber einige haben nicht. Die Tabellen können wie folgt aussehen:
== Mother ==
| 1 |
| 2 |
== Kitten ==
| 1 | NULL |
| 2 | 1 |
| 3 | NULL |
| 4 | 2 |
| 5 | 1 |
| 6 | NULL |
Now (aufgrund einiger Anforderungsänderungen) jedes Kätzchen eine Mutter haben muss, die gerade erstellt werden soll. Ich habe folgendes versucht: funktioniert nicht.
UPDATE Kitten
SET mother_id = (
INSERT INTO Mother DEFAULT VALUES RETURNING id
)
WHERE mother_id IS NULL;
Fehler ist
Fehler in der SQL-Abfrage: ERROR: syntax error at or near "INTO"
LINE 3: INSERT INTO Mother DEFAULT VALUES RETURNING id
Mit PosgreSQL 9.3.5
Auto-Erhöhungs-Kommentar: Die Kombination von "serial" und "Primärschlüssel" ermöglicht Autoinkrement standardmäßig
Hier ist die SQL-Snipped, um den beschriebenen Datenbankstatus zu erstellen:
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);
Möchten Sie eine neue Mutter für ** jedes ** Kätzchen erstellen, das keine hat? (also 2 neue Mütter basierend auf Ihren Probendaten), oder ** nur eine Mutter, die für beide verwaisten Kätzchen verwendet wird (was die Syntax, die Sie versucht haben zu verwenden, vorschlagen würde) –
ja für jedes Kätzchen eine neue Mutter – Marcel