回答

收藏

使用插入到选择中会导致选择附近的语法不正确,为什么?

技术问答 技术问答 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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则