[英]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:它看起來像你也有old
和new
換你的問題。 您是否真的要將A的值設置為B的old
字段?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.