使用插入到选择中会导致选择附近的语法不正确,为什么?
技术问答
283 人阅读
|
0 人回复
|
2023-09-14
|
如何在INSERT操作中进行SELECT?7 S) _; j, d9 h/ w: R7 Q! h' D
insert into tableX (a_id, b_id) 0 U2 ?- A2 `+ k! L7 c( G
VALUES ((SELECT service_id
e; Q4 t" Q7 F7 k! T# x; D8 ` FROM tableY 5 i$ s# ~" p6 f3 ]/ v; {
WHERE id = 10, 2));) S9 r; S; }" i2 }( C. s6 \
但是服务器返回语法错误,为什么?
, ]8 P! _# i" o5 CSQL Error [156] [S0001]: Incorrect syntax near the keyword 'select'.# l: T7 U- J+ L
0 _0 t- j9 p0 L. q) H$ z解决方案:
: D6 v2 F$ o1 g6 n z5 x y9 t
a; o" E7 V1 p" N* X; Z! H
' G( |; P* b5 @& R3 y' f
[, `, L0 v. D, t 虽然我的原始答案给出了可行的解决方案,但实际上我对错误原因有误。在VALUES子句中使用标量子查询没有任何问题。问题中陈述的问题很简单,就是一个圆括号放在错误的位置。标量子查询必须用括号括起来。' B0 x- V/ U4 Z* c; W% c
这应该工作:; ] z% a1 q+ v$ x3 o( A+ X2 o- G
insert into tableX (a_id, b_id) % s s9 c K8 t& v
VALUES (: r! [! o4 Q, f; \
(SELECT service_id
% w* Z# L$ F( O1 [* b2 C FROM tableY
+ f$ I; ~. j) K WHERE id = 10)
% w7 e3 w5 t- c5 G; z$ _ , 2$ O, }1 V- k& X5 H8 C
);
6 M- @! t( `* v) Q原始答案. a% K# [, c: |/ N1 S
VALUES只能与文字值一起使用。但是,可以在子查询中使用文字值。做这个:
. k; P! ]% W1 ^: dinsert into tableX (a_id, b_id) SELECT service_id, 2 FROM tableY WHERE id = 10 |
|
|
|
|
|