在INSERT的VALUES上选择

时间:2015-03-05 08:50:49

标签: mysql sql insert sql-update

我的问题是,有没有办法做到这一点:

INSERT INTO t1 (c1, c2, c3, c4, c5)
VALUES (SELECT c1 FROM t2, 15, 2, 'Name', SELECT c5 FROM t4);

我知道我有INSERT INTO t1 FROM SELECT,但我无法在这种特殊情况下使用它,我想知道是否可以在插入值中添加选择。

5 个答案:

答案 0 :(得分:1)

使用 parenthesis 进行子查询,请使用:

INSERT INTO t1 (c1, c2, c3, c4, c5)
VALUES ((SELECT c1 FROM t2), 15, 2, 'Name', (SELECT c5 FROM t4));

答案 1 :(得分:0)

是的,这是可能的,但不是你提到的语法:

INSERT INTO t1 (c1, c2, c3, c4, c5)
SELECT t2.c1 , 15, 2, 'Name', t4.c5
FROM t2, t4
WHERE t2.some_field = t4.some_other_field

t2t4表之间应该有一些逻辑连接或它们自己的WHERE条件。

答案 2 :(得分:0)

是的,有办法制作它。您需要为parenthesis使用SELECT

INSERT INTO t1 (c1, c2, c3, c4, c5)
VALUES ((SELECT c1 FROM t2), 15, 2, 'Name', (SELECT c5 FROM t4));

请记住,您的选择应仅返回1个值。

答案 3 :(得分:0)

这应该适合你。

INSERT INTO `pages` (name, content, modified) 
VALUES ('new page', (SELECT `description` FROM `categories` WHERE id = '4'), NOW());

我想你只是忘了把子查询放在括号中。

答案 4 :(得分:0)

你应该使用这样的东西:

INSERT INTO  t1 (c1, c2, c3, c4, c5)
SELECT
   f1.c1, 15, 2, 'Name', f2.c5
FROM
   (SELECT c1 FROM t2) AS f1
    CROSS JOIN
   (SELECT c5 FROM t4) AS f2