我有一个快速的问题。我有一个表用户
-----------------------------
| ID | first_name | last_name |
-----------------------------
Run Code Online (Sandbox Code Playgroud)
和另一个表,如 users.login
------------------
| users_ID | EMAIL |
------------------
Run Code Online (Sandbox Code Playgroud)
我在第一个表中的 id 从某个点自动递增,比如 160,000。如何从第一个表中获取 id,将其保存为一个值,然后将该值放入第二个表的 id 中?users.login 中的 id 是 users.id 的外键。
到目前为止我有
INSERT INTO public.users (first_name, last_name)
VALUEs ($1,$2) RETURNING ID;
INSERT INTO public.users_login(email, ID)
Values($1, id)
Run Code Online (Sandbox Code Playgroud)
这行得通吗?我是 postgres 的新手。
考虑RETURNING
在INSERT
orUPDATE
语句上使用子句来插入外键。来自PostgreSQL 文档:
WITH upd AS (
UPDATE employees
SET sales_count = sales_count + 1
WHERE id =
(
SELECT sales_person
FROM accounts
WHERE name = 'Acme Corporation'
)
RETURNING *
)
INSERT INTO employees_log
SELECT *, current_timestamp FROM upd;
Run Code Online (Sandbox Code Playgroud)
因此,您的语句需要在 common-table-expression 中执行初始插入,它返回id
以允许将其插入到users_login
表中:
CREATE TABLE users (
user_id serial
, first_name varchar(30)
, last_name varchar(30)
);
CREATE TABLE users_login (
user_login_id serial
, email varchar(30)
, user_id int
);
WITH ins AS (
INSERT INTO users (first_name, last_name)
VALUES ('hannah', 'vernon')
RETURNING user_id
)
INSERT INTO users_login(email, user_id)
SELECT 'us@them.com', user_id
FROM ins
Run Code Online (Sandbox Code Playgroud)
查询两个表:
SELECT *
FROM users u
INNER JOIN users_login ul ON u.user_id = ul.user_id;
Run Code Online (Sandbox Code Playgroud)
?????????????????????????????????????????????????????? ?????????????????????????????? ? 用户身份 ?名 ?姓 ?用户登录 ID ? 电子邮件 ?用户身份 ? ?????????????????????????????????????????????????????? ?????????????????????????????? ? 1 ? 汉娜?弗农?1 ? us@them.com ? 1 ? ?????????????????????????????????????????????????????? ??????????????????????????????
归档时间: |
|
查看次数: |
309 次 |
最近记录: |