Ban*_*der 28 sql postgresql insert subquery
我有一张名为map_tags:
map_id | map_license | map_desc
Run Code Online (Sandbox Code Playgroud)
另一个table(widgets),其记录包含对记录的外键引用(1到1)map_tags:
widget_id | map_id | widget_name
Run Code Online (Sandbox Code Playgroud)
鉴于所有map_licenses都是唯一的约束(但是没有设置为键map_tags),那么如果我有a map_license和a widget_name,我想widgets在同一个SQL语句的所有内部执行插入:
INSERT INTO
widgets w
(
map_id,
widget_name
)
VALUES (
(
SELECT
mt.map_id
FROM
map_tags mt
WHERE
// This should work and return a single record because map_license is unique
mt.map_license = '12345'
),
'Bupo'
)
Run Code Online (Sandbox Code Playgroud)
我相信我走在正确的轨道上但是马上知道这对于Postgres来说这是不正确的SQL.有没有人知道实现这样一个查询的正确方法?
gah*_*ooa 37
使用INSERT INTO SELECT变量,包括SELECT语句中的任何常量.
PostgreSQL INSERT语法是:
INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
Run Code Online (Sandbox Code Playgroud)
记下上面第二行末尾的查询选项.
这是一个例子.
INSERT INTO
widgets
(
map_id,
widget_name
)
SELECT
mt.map_id,
'Bupo'
FROM
map_tags mt
WHERE
mt.map_license = '12345'
Run Code Online (Sandbox Code Playgroud)
Clo*_*eto 33
INSERT INTO widgets
(
map_id,
widget_name
)
SELECT
mt.map_id, 'Bupo'
FROM
map_tags mt
WHERE
mt.map_license = '12345'
Run Code Online (Sandbox Code Playgroud)