我试图将记录更新到列数字中的值在另一个表中按ID匹配,但是它将Number列中的所有行更新为另一个表中第一个匹配的ID所匹配的值。
UPDATE public.table
SET number = s.number,
updatedt = now()
-- select a.* , s.number
FROM public.Department AS a
INNER JOIN public.Department_stg AS s
ON a.id = s.id
AND a.number <> s.number;
--AND COALESCE (a.number, 1) = COALESCE (s.number, 1) ;
--AND COALESCE (CAST (a.number AS VARCHAR(20) ),'') <> COALESCE (CAST (s.numberAS VARCHAR(20) ),'') ;
您忘记使用FROM
子句中的内连接连接"table"
的WHERE
条件;也许
WHERE "table".id = a.id
如果没有这样的条件,"table".number
将被更新为来自内部连接的任何行。
与postgreSQL中的T-SQL不同,JOIN不需要更新。我们可以只在From子句中传递源值表,并在UPDATE子句中保持要更新的表。
UPDATE public.table AS a
SET number= s.number,
updatedt = now()
FROM public.Department_stg AS s
WHERE a.id = s.id
AND COALESCE (a.number, 1) <> COALESCE (s.number, 1) ;