sql upsert 语句- postgresql
sql upsert statement- postgresql
Table
id | name | value
0 | apis | apple
我想将 ,orange 附加到这个值,值应该类似于 apple,orange
我正在尝试执行此查询,但假设原始值为苹果,所以我希望最终值为苹果、橙色,但我得到的是 橙色、橙色 .好像 EXCLUDED.value 是从 INSERT STATEMENT 读取的,我如何获得由逗号和橙色附加的原始值 (apple,orange)
INSERT INTO my_table(id, name, value)
VALUES(0, 'apis', 'dummyapi')
ON CONFLICT (id,name)
DO UPDATE set value = EXCLUDED.value || ',dummyapi'
where my_table.name = 'apis'
AND my_table.id=0
AND my_table.value not ilike '%dummyapi%';
在您的查询中,您将 EXCLUDED 变量与字符串连接起来,因此覆盖了 value
的内容,检查一下:
INSERT INTO my_table(id, name, value) VALUES(0, 'apis', 'orange')
ON CONFLICT (id,name)
DO UPDATE set value = my_table.value || ',' || EXCLUDED.VALUE;
演示:db<>fiddle
Table
id | name | value
0 | apis | apple
我想将 ,orange 附加到这个值,值应该类似于 apple,orange
我正在尝试执行此查询,但假设原始值为苹果,所以我希望最终值为苹果、橙色,但我得到的是 橙色、橙色 .好像 EXCLUDED.value 是从 INSERT STATEMENT 读取的,我如何获得由逗号和橙色附加的原始值 (apple,orange)
INSERT INTO my_table(id, name, value)
VALUES(0, 'apis', 'dummyapi')
ON CONFLICT (id,name)
DO UPDATE set value = EXCLUDED.value || ',dummyapi'
where my_table.name = 'apis'
AND my_table.id=0
AND my_table.value not ilike '%dummyapi%';
在您的查询中,您将 EXCLUDED 变量与字符串连接起来,因此覆盖了 value
的内容,检查一下:
INSERT INTO my_table(id, name, value) VALUES(0, 'apis', 'orange')
ON CONFLICT (id,name)
DO UPDATE set value = my_table.value || ',' || EXCLUDED.VALUE;
演示:db<>fiddle