Вставьте значения в 2 таблицы одновременно - postgres - PullRequest
0 голосов
/ 19 октября 2019

У меня есть две таблицы, и я пытаюсь добавить данные в обе в одно и то же время, но у меня возникают проблемы с работой моей вставки.

Таблицы:

CREATE TABLE "user" (
    "id" SERIAL PRIMARY KEY,
    "username" VARCHAR (80) UNIQUE NOT NULL,
    "password" VARCHAR (1000) NOT NULL,
    "admin" boolean DEFAULT FALSE
);

CREATE TABLE "user_info" (
"id" SERIAL PRIMARY KEY,
"first_name" varchar(60) NOT NULL,
"last_name" varchar(60) NOT NULL,
"email" varchar(120),
"street" varchar(200),
"city" varchar(200),
"state" varchar(2),
"zipcode" varchar(20),
"phone" INT,
"user_login_id" INT REFERENCES "user"
);

Код, который я пробовал, был:

WITH "user_insert" as (
INSERT INTO "user" ("username", "password") 
VALUES ('larry', 'root')
RETURNING "id" as "user_login_id"
),
"second_insert" as (
INSERT INTO "user_info"("first_name", "last_name", "email", "street", "city", "state", "zipcode", "phone", "user_login_id")
VALUES ('larry', 'marry', '222@gmail.com', '222 adam street', 'saint paul', 'MN', '55101', '5551113333', 
(select id from "user")
);

Я ожидал добавить эти значения в соответствующие таблицы. Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 19 октября 2019

Во-первых, вам нужен оператор SQL, чтобы следовать за CTE.

Кроме того, я сомневаюсь, что вам нужны все двойные кавычки. Действительно лучше определить таблицы и столбцы без них.

Я думаю, что должно работать следующее:

WITH u as (
     INSERT INTO user (username, password)
         VALUES ('larry', 'root')
         RETURNING id
     )
INSERT INTO user_info (first_name, last_name, email, street, city, state, zipcode, phone, user_login_id) 
    SELECT 'larry', 'marry', '222@gmail.com', '222 adam street', 'saint paul', 'MN', '55101', '5551113333', u.id
    FROM u;
...