【发布时间】:2012-10-12 13:59:08
【问题描述】:
我有一张桌子叫map_tags:
map_id | map_license | map_desc
还有另一个表 (widgets),其记录包含对 map_tags 记录的外键引用(1 到 1):
widget_id | map_id | widget_name
鉴于所有map_licenses 都是唯一的约束(但未设置为map_tags 上的键),那么如果我有map_license 和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'
)
我相信我在正确的轨道上,但马上就知道这对于 Postgres 来说是不正确的 SQL。有人知道实现这样一个查询的正确方法吗?
【问题讨论】:
-
从来没有用PostgreSQL做过,但它不应该看起来像
INSERT INTO widgets SELECT NULL, map_id, 'Bupo' FROM map_tags WHERE map_license = '12345'吗? -
感谢@raina77ow (+1) - 我不确定这是否应该是这样。代替
(...) VALUES(...)语法的SELECT语句绝对让我失望。你介意向我解释一下这应该如何工作吗?再次感谢! -
好吧,我只是在 MySQL 中像 this 一样使用它......我想原因是你必须构建将要插入的整组数据 - 和 VALUES ((SELECT smth), 'smth_else') 就是不这样做。 )
-
您实际上不需要根据以下语法使用值:INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1;
标签: sql postgresql insert subquery