簡體   English   中英

如果表A中的值等於表B中的值,則SQL更新集表

[英]SQL update set table if value in table A is equals to value in table B

此查詢工作正常。

UPDATE data
   SET unit_id='a3110a89'
 WHERE unit_id='7d18289f';

現在,我需要運行此查詢超過30次,因此我使用以下命令將csv文件導入到數據庫中:

COPY mytable FROM 'D:/test.csv' WITH CSV HEADER DELIMITER AS ','

現在,我有一個名為“我的表”的表,該表具有OLD和NEW兩列,如果值等於表“ mytable.old”中的值,我想在unit_id列中的表“ data”中搜索該表,並將其替換為值“ 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

我想我只是想以錯誤的方式來做...

thx的幫助!

順便說一句我使用PostgreSQL

您的子查詢需要與外部更新相關聯:

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設置為“新”值。

你可以這樣嘗試嗎

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
UPDATE data A
  SET unit_id = B."old"
  FROM public.mytable B
  WHERE A.unit_id = B."new"
  ;

BTW:它看起來像你也有oldnew換你的問題。 您是否真的要將A的值設置為B的old字段?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM