1

再会,

我目前正在使用 posgresql 作为我的后端,我必须对我的表字段进行巨大的更改。我将使用两张桌子。

Table 1         Table 2

Old Index       New Index
Product Id      Old  Index
Address         Product Id
Contact no      Address
                Contact no
                Email

我必须从表 2 中迁移表 1 中的所有详细信息。我为表 2 使用了不同的索引。为了让其他表能够识别我的旧索引,我使用了这个查询

Update Table 2 Set  OldIndex =Table2.index
From(select  Oldindex  from Table 1)as  new,Table 1
Where  Table1.Productid =Table2.Productid

我有其他与表 1 相关的表,所以我的目标是用新索引替换旧索引,并希望其他表也能看到更改。但我不确定我做对了。我的查询很慢,如果我做错了,我希望有人可以测试我的查询并指出正确的方向,提前谢谢你。

4

2 回答 2

1

你介意试试 MERGE

MERGE INTO Table2 AS b
USING Table1 AS p
ON p.product_id = b.product_id
WHEN MATCHED THEN b.OldIndex = b.NewIndex

我不知道它对 postgresql 是如何工作的,但你可以在这里找到一些示例:https ://wiki.postgresql.org/wiki/MergeTestExamples

于 2013-06-23T15:51:33.877 回答
0

在 PostgreSQL 中执行此操作的方法是使用可写 CTE(在 9.2 及更高版本中可用)。

这样,您将执行以下操作:

WITH up (UPDATE table2
            SET ....
           FROM table1 t1
          WHERE t1.product_id = table2.product_id
         RETURNING product_id)
 INSERT INTO table2 (...)
 SELECT ... 
   FROM table1 
  WHERE product_id NOT IN (select product_id from up);

您可以在此处找到一些示例。

于 2013-10-07T03:30:05.660 回答