根据另一个表更新表中的每一行

时间:2015-04-29 08:28:37

标签: database db2

我正在做这次更新

UPDATE ROOM_DATE rd SET HOTEL_ID = (
    SELECT hotel_id FROM ROOM_TYPE rt WHERE rt.ROOM_TYPE_ID = rd.room_type_id
)
WHERE room_type_id < 40000 AND hotel_id IS NULL;

有一个表ROOM_DATE,需要添加一个hotel_id。以上查询根据ROOM_TYPE表中的hotel_id更新此ID。

这很有效,但速度很慢。执行需要一个小时,所以如果有更好/更快的方式,我就会徘徊。

2 个答案:

答案 0 :(得分:0)

您需要在联接或where-conditions中使用的列上使用索引。否则,您的数据库将执行全表扫描(这很慢)。

因此,在您的情况下,您需要索引:

ROOM_DATE.ROOM_TYPE_ID

ROOM_DATE.HOTEL_ID

ROOM_TYPE.ROOM_TYPE_ID

答案 1 :(得分:0)

所以我找到了一种方法,只需要几分钟。首先,我使用从room_type获取的额外列(hotel_id)导出表格:

export to "./roomdate_new.data" of del modified by coldel| 
SELECT rd.ROOM_TYPE_ID, rd.single_day_date, rd.numavail, rd.numtaken, rd.price, rt.hotel_id 
FROM ROOM_TYPE rt, ROOM_DATE rd 
WHERE rt.ROOM_TYPE_ID = rd.room_type_id;

然后我再次导入表格:

load from "./roomdate_new.data" of del modified by coldel| method P (1,2,3,4,5,6) replace  INTO ROOM_DATE;
set integrity for ROOM_DATE allow no access immediate checked;

但我认为这不是特别优雅。我本来希望使用普通的SQL语句或过程。