在 MySQL 中,我可以进行这样的查询
UPDATE
prd_sectionshapename se
inner join
prd_shape s
ON
s.id = se.shape_id
SET
se.company_shape_name = 'ABC',
s.name_en = 'Another name'
WHERE s.serial_number = '1234ST';
在 Postgres 中,我需要分成 2 个查询
UPDATE prd_shape AS s
SET name_en = 'Another name'
WHERE s.serial_number = '1234ST';
UPDATE prd_sectionshapename AS se
SET company_shape_name = 'ABC'
FROM prd_shape s
WHERE se.shape_id = s.id and s.serial_number = '1234ST';
我的问题是可以像 MySQL 一样在 1 个查询中完成吗?
请注意,我在互联网上找到的其他 postgres 更新连接答案通常表明更新效果仅发生在单个表上,即使使用了 JOIN 也是如此。
我的目的是在一个查询中更新多个表。不只是一张桌子。
我不明白你为什么要这样做。与单个语句相比,单个事务中的两个 UPDATE 语句就可以了,并且不会产生任何额外的开销。
话虽如此:可以通过使用可写的公用表表达式
该解决方案确实有一个优势:您必须只指定
serial_number
一次的值。但它没有性能或事务优势。在 postgresql 中是不可能的,因为 set 子句的写入范围仅限于 update 部分提到的表,它只允许一个表,尽管可以在 from 子句中指定其他表,然后它们可以在 set 的读取范围内使用条款。