SQL - 在INSERT VALUES中选择

时间:2011-06-06 16:12:46

标签: sql

如何在INSERT操作中进行SELECT?

insert into tableX (a_id, b_id) 
VALUES ((SELECT service_id 
         FROM tableY 
         WHERE id = 10, 2));

但是收到错误.. 那里有什么不对?

由于

6 个答案:

答案 0 :(得分:40)

虽然我的原始答案给出了一个有效的解决方案,但实际上我错误的原因是错误的。在VALUES子句中使用标量子查询没有任何问题。问题陈述的问题只是一个括号出错了;标量子查询必须括在括号中。

这应该有效:

insert into tableX (a_id, b_id) 
VALUES (
  (SELECT service_id 
         FROM tableY 
         WHERE id = 10)
  , 2
  );

原始答案

VALUES只能与文字值一起使用。但是,可以在子查询中使用文字值。这样做:

insert into tableX (a_id, b_id) SELECT service_id, 2 FROM tableY WHERE id = 10

答案 1 :(得分:9)

您不需要值关键字,也可以在选择列表中为b_id列添加默认值2,而不是在SELECT语句后添加它

试试这个:

INSERT INTO tableX (a_id, b_id) 
SELECT service_id, 2 
  FROM tableY 
 WHERE id = 10

答案 2 :(得分:1)

您不需要values字。

这里有一些mysql的文档

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

另外,当您指定要插入值的列时,您需要确保您的select返回与您指定的相同的数字/类型。

答案 3 :(得分:1)

您告诉DBMS您正在插入两个值(a_id,b_id)但只选择一个(service_id)。

答案 4 :(得分:0)

尝试:

insert into tableX (a_id, b_id)
SELECT service_id, 4 as QUESTIONMARK FROM tableY WHERE id in (10, 2);

这适用于许多数据库引擎,但我们不知道您正在使用的环境。

编辑:第二次插入应该是什么?

答案 5 :(得分:-1)

在我的SQL中,可以插入动态值。这是样本 INSERT INTO Item_Info(Back_Ground_Color,)VALUES((选择concat('#',SUBSTRING((lpad(hex(round(rand()* 10000000)),6,0)), - 6)))) ;