来自JOIN表的PostgreSQL更新表

时间:2018-02-04 16:42:14

标签: sql postgresql

我有两个名为itemsitem_records的数据库表。在表items中,有一个名为current_item_record_id的字段,它是item_records表中的最新记录。

以下是两个表格中的示例:

表项目:

Item ID   |  current_item_record_id    

100                  NULL

和 表项目记录

ID    | item_id   | created_at
500     100         2018-01-12 14:48:37
501     100         2018-01-13 14:48:37
501     100         2018-01-14 14:48:37

最终结果应该是这样的:

Item ID   |  current_item_record_id    

100          500

问题:我需要更优化的查询来查询大表内容。

以下是我的查询:

UPDATE items 
   SET current_item_record_id = (SELECT id 
                                 FROM item_records 
                                 WHERE item_id = items.id 
                                 ORDER BY created_at desc LIMIT 1)  
WHERE items.current_item_record_id IS NULL;

1 个答案:

答案 0 :(得分:0)

对于此查询:

UPDATE items i
    SET current_item_record_id = (SELECT id
                                  FROM item_records ir
                                  WHERE ir.item_id = i.id
                                  ORDER BY ir.created_at DESC
                                  LIMIT 1)
    WHERE i.current_item_record_id IS NULL;

您需要item_records(item_id, created_at)items(current_item_record_id, id)上的索引。

这应该足以提高性能。