【发布时间】:2014-07-31 14:41:30
【问题描述】:
我有一张名为 test 的表,它有 4 列:
id INT
v_out INT
v_in INT
label CHARACTER
我正在尝试使用以下查询更新表:
String sql = "
update
test
set
v_out = temp.outV
, v_in = temp.inV
, label = temp.label
from (
values
(1,234,235,'[abc]') // these value are read from other places
,(2,234,5585,'[def]') //[abc] = object.toString();
) as temp (e_id, outV, inV, label)
where
id = temp.e_id;
当我执行它时,我得到了错误: org.postgresql.util.PSQLException:错误:“[”或附近的语法错误
在出现此错误之前,我已经更新了 3000 多行。
那是什么原因造成的呢?是因为“[”这个字符吗? 这是原始表格:
create table edges(
id serial not null primary key,
vertex_out int,
vertex_in int,
label character varying(255),
constraint fk_vertex_out foreign key (vertex_out) references vertices(id) on delete cascade,
constraint fk_vertex_in foreign key (vertex_in) references vertices(id) on delete cascade
);
【问题讨论】:
-
这看起来不错:sqlfiddle.com/#!15/d7f14/2 一定有什么你没有告诉我们。
-
我怀疑
label的类型是CHARACTER。 (这将是单个字符,与char(1)相同。)请提供您的实际表定义 - 您在 psql 中使用\t tbl得到的结果。 -
创建表边(id SERIAL NOT NULL PRIMARY KEY, vertex_out INT, vertex_in INT, label CHARACTER VARYING (255), CONSTRAINT fk_vertex_out FOREIGN KEY (vertex_out) REFERENCES vertices (id) ON DELETE CASCADE, CONSTRAINT fk_vertex_in FOREIGN KEY (vertex_in) REFERENCES vertices (id) ON DELETE CASCADE );
-
(1) 那些
//"cmets" 真的在你的SQL 中吗? (2) 您是否使用字符串插值来构建您的 SQL? -
不,我只是把它们加在那里让人们理解。当我更新时,这些 cmets 将被删除。
标签: sql postgresql sql-update