如何在INSERT操作中进行SELECT?
insert into tableX (a_id, b_id)
VALUES ((SELECT service_id
FROM tableY
WHERE id = 10, 2));
但是收到错误.. 那里有什么不对?
由于
答案 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)))) ;