假设我有一个包含以下列的表:
a: integer
b: integer
c: integer
d: integer
code: text
(a, b) is a foreign key to another table 1
(c, d) is a foreign key to another table 2
插入很简单:
INSERT INTO table(a, b, c, d, code) VALUES(x1, y1, x2, y2, 'my code')
现在,我想在子查询中获取复合外键a,b
和c,d
的值时插入。像这样:
INSERT INTO table(a, b, c, d, code) VALUES
((SELECT a, b FROM other-table-1 WHERE ...),
(SELECT c, d FROM other-table-2 WHERE ...), 'my code')
上面的查询并不是可行的,但它说明了我想要实现的目标。
另一次尝试,但也无效(子查询必须返回一列):
INSERT INTO table(a, b, code)
SELECT (SELECT a, b FROM other-table-1 WHERE ...),
(SELECT c, d FROM other-table-2 WHERE ...), 'my code')
这有可能吗?
答案 0 :(得分:2)
如果我的代码'您必须使用以下语法来插入记录。永远是静态的
INSERT INTO table(a, b, code)
SELECT a, b, 'my code' FROM other-table WHERE ...
如果你有多个表,那么你可以使用CTE
这样的语法INSERT INTO table(a, b, c, d, code)
WITH t1 AS (
SELECT a, b FROM other-table-1 WHERE ...
), t2 AS (
SELECT c, d FROM other-table-2 WHERE ...
)
select t1.a, t1.b, t2.c, t2.d, 'my code' from t1,t2
答案 1 :(得分:1)
您的查询应该是这样的结构:
INSERT INTO table(a, b, c, d, code)
SELECT x.a, x.b, y.c, y.d, 'my code' FROM other-table-1 AS x
CROSS JOIN other-table-2 AS y
WHERE ...