如果表A中的值等于表B中的值,则SQL更新集表

时间:2014-01-22 11:58:06

标签: sql postgresql sql-update

此查询工作正常。

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

3 个答案:

答案 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"
  ;

顺便说一句:您的问题似乎也换了oldnew。你真的希望A的值设置为B的old字段吗?