此查询工作正常。
UPDATE data
SET unit_id='a3110a89'
WHERE unit_id='7d18289f';
现在,我需要运行此查询超过30次 所以我用这个命令将csv文件导入数据库:
COPY mytable FROM 'D:/test.csv' WITH CSV HEADER DELIMITER AS ','
现在我有一张名为my table的表,其中包含2列OLD和NEW 我想搜索单元unit_id中的表“data”,如果值等于表“mytable.old”中的值,则将其替换为同一行中的值“mytable.new”。
我尝试运行此查询,但收到错误:
UPDATE data
SET unit_id=(SELECT mytable."old" FROM public.mytable)
WHERE unit_id=(SELECT mytable."new" FROM public.mytable)
错误:
more than one row returned by a subquery used as an expression
我想我只是想以错误的方式做到这一点......
这是帮助! 顺便说一句,我使用PostgreSQL答案 0 :(得分:1)
您的子查询需要与外部更新相关联:
UPDATE data
SET unit_id = (SELECT mytable."new" FROM public.mytable where data.old = mytable.old)
WHERE unit_id in (SELECT mytable."old" FROM public.mytable);
也就是说,当您在表格中找到“旧”值时,将unit_id
设置为“新”值。
答案 1 :(得分:0)
你能尝试这样吗,
UPDATE data A
SET A.unit_id=B.old
FROM (SELECT mytable."old",mytable."new" FROM public.mytable) B
WHERE A.unit_id=B.new
答案 2 :(得分:0)
UPDATE data A
SET unit_id = B."old"
FROM public.mytable B
WHERE A.unit_id = B."new"
;
顺便说一句:您的问题似乎也换了old
和new
。你真的希望A的值设置为B的old
字段吗?