首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL从一个表的字段更新另一个表的字段

SQL从一个表的字段更新另一个表的字段
EN

Stack Overflow用户
提问于 2010-05-04 16:27:15
回答 5查看 188.4K关注 0票数 156

我有两张表:

代码语言:javascript
复制
A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]

A将始终是B的子集(这意味着A的所有列也在B中)。

我想用B中的特定ID更新一条记录,该记录包含来自AA所有列的数据。此IDAB中都存在。

有没有一种UPDATE语法或其他方法可以在不指定列名的情况下做到这一点,只需说"set all column of A“

我使用的是PostgreSQL,因此也可以接受特定的非标准命令(但不是首选命令)。

EN

回答 5

Stack Overflow用户

发布于 2010-05-04 23:41:31

您可以使用非标准的FROM子句。

代码语言:javascript
复制
UPDATE b
SET column1 = a.column1,
  column2 = a.column2,
  column3 = a.column3
FROM a
WHERE a.id = b.id
AND b.id = 1
票数 292
EN

Stack Overflow用户

发布于 2014-05-17 02:56:33

这是一个很大的帮助。代码

代码语言:javascript
复制
UPDATE tbl_b b
SET   (  column1,   column2,   column3)
    = (a.column1, a.column2, a.column3)
FROM   tbl_a a
WHERE  b.id = 1
AND    a.id = b.id;

效果很好。

请注意,您需要在

代码语言:javascript
复制
From "tbl_a" a

才能让它工作。

票数 7
EN

Stack Overflow用户

发布于 2010-05-04 16:48:10

不一定如您所愿,但也许使用postgres继承可能会有所帮助?

代码语言:javascript
复制
CREATE TABLE A (
    ID            int,
    column1       text,
    column2       text,
    column3       text
);

CREATE TABLE B (
    column4       text
) INHERITS (A);

这就避免了更新B的需要。

但一定要阅读所有的details

否则,您所请求的内容就不被认为是一种好的实践--不鼓励使用SELECT * ...的视图之类的动态内容(因为这种轻微的便利可能会破坏更多的东西,而不是帮助事情),并且您所请求的内容对于UPDATE ... SET命令来说是等效的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2763817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档