Postgresql 通过递增id从select查询创建插入查询
我试图从一个表中复制数据,并用一些不同的字段插入其中。在这里插入它会导致一个问题,我必须指定id(主键),它应该是自动递增的,但由于某些原因,在创建表时没有设置为serial。我希望根据现有数据在要插入的数据中添加一个递增id 任何帮助都将不胜感激Postgresql 通过递增id从select查询创建插入查询,postgresql,Postgresql,我试图从一个表中复制数据,并用一些不同的字段插入其中。在这里插入它会导致一个问题,我必须指定id(主键),它应该是自动递增的,但由于某些原因,在创建表时没有设置为serial。我希望根据现有数据在要插入的数据中添加一个递增id 任何帮助都将不胜感激 WITH my_admin_id AS ( SELECT id FROM dashboard_admin WHERE email = 'someone@somedomain.com' ), get_admin AS ( SELECT
WITH my_admin_id AS
(
SELECT id
FROM dashboard_admin
WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
SELECT id
FROM dashboard_admin
WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_admin_projects AS
(
SELECT *
FROM dashboard_project
WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
AND is_deleted = 'false'
) INSERT INTO dashboard_project
(
SELECT id,
name,
created_date,
(SELECT * FROM my_admin_id LIMIT 1)AS admin_id,
category_id,
subcategory_id,
is_deleted FROM get_admin_projects
)
更新:
在执行要插入的select查询之前,获取了以下结果
67 1stAd 2017-04-21 15:25:16.430889 100 18 47 false
71 2stAd 2017-05-12 10:18:55.383967 100 34 90 false
在这里,我刚刚添加了一个查询来获取max id。我只需要为最终select查询中的每个记录增加它
WITH my_admin_id AS
(
SELECT id
FROM dashboard_admin
WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
SELECT id
FROM dashboard_admin
WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_max_project AS
(
SELECT MAX(id) FROM dashboard_project
),
get_admin_projects AS
(
SELECT id,
name,
created_date,
admin_id,
category_id,
subcategory_id,
is_deleted
FROM dashboard_project
WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
AND is_deleted = 'false'
) (SELECT (SELECT * FROM get_max_project) id,
name,
created_date,
(SELECT * FROM my_admin_id LIMIT 1) AS admin_id,
category_id,
subcategory_id,
is_deleted
FROM get_admin_projects)
101 1stAd 2017-04-21 15:25:16.430889 100 18 47 false
101 2ndAd 2017-05-12 10:18:55.383967 100 34 90 false
这是执行select查询时的结果值
WITH my_admin_id AS
(
SELECT id
FROM dashboard_admin
WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
SELECT id
FROM dashboard_admin
WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_max_project AS
(
SELECT MAX(id) FROM dashboard_project
),
get_admin_projects AS
(
SELECT id,
name,
created_date,
admin_id,
category_id,
subcategory_id,
is_deleted
FROM dashboard_project
WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
AND is_deleted = 'false'
) (SELECT (SELECT * FROM get_max_project) id,
name,
created_date,
(SELECT * FROM my_admin_id LIMIT 1) AS admin_id,
category_id,
subcategory_id,
is_deleted
FROM get_admin_projects)
101 1stAd 2017-04-21 15:25:16.430889 100 18 47 false
101 2ndAd 2017-05-12 10:18:55.383967 100 34 90 false
最后,使用我添加到max id中的row_number()窗口函数,将值增加到max id以上,使其工作如下
WITH my_admin_id AS
(
SELECT id
FROM dashboard_admin
WHERE email = 'someone@somedomain.com'
),
get_admin AS
(
SELECT id
FROM dashboard_admin
WHERE user_id IN (SELECT id FROM auth_user WHERE username = 'demo')
),
get_max_project AS
(
SELECT MAX(id) FROM dashboard_project
),
get_admin_projects AS
(
SELECT id,
name,
created_date,
admin_id,
category_id,
subcategory_id,
is_deleted
FROM dashboard_project
WHERE admin_id IN (SELECT * FROM get_admin LIMIT 1)
AND is_deleted = 'false'
)
insert into dashboard_project (SELECT ((SELECT * FROM get_max_project) + row_number() over ()) as id,
name,
created_date,
(SELECT * FROM my_admin_id LIMIT 1) AS admin_id,
category_id,
subcategory_id,
is_deleted
FROM get_admin_projects)