postgresql - 一次将值插入 2 个表 - postgres
问题描述
我有两个表,我试图同时向两个表中添加数据,但我无法让我的插入工作。
这些表是:
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")
);
我期望将这些值添加到各自的表中。有人可以帮忙吗?
解决方案
首先,您需要一条 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;
推荐阅读
- html - 如何在引导程序 4 下拉菜单上禁用悬停
- java - Collectors.Counting 的时间复杂度 (java)
- ios - Firebase observeSingleEvent 完成处理程序
- c - 了解父子进程执行顺序
- node.js - 如何开玩笑地模拟 AWS TimestreamWrite
- android - TypeError:尝试从 android 模拟器访问本地 API 时网络请求失败。反应原生
- python - 创建一个面临名称错误的预订程序
- angular - 除非触发另一个错误,否则 Angular 表单交叉验证错误消息不会显示在视图中
- android - Android Room Insert 不插入也不做任何事情
- php - 使用 PHP printf 和 sprintf 函数在文本字符串中输出动态电子邮件 mailto 链接