插入不存在的地方不起作用

时间:2016-02-19 22:08:33

标签: teradata

这是一个简单的选择语句,我试图插入带有时间戳的任何新更新。出于某种原因,它似乎并没有起作用。一切看起来都不错,但是当我测试查询时,它似乎无法正常工作。

INSERT sandbox.inv_room_type_inventory_snpsht 
SELECT id, hotel_id, room_type_id, date__, stop_sell, 
   inventory_count, created, modified__, 
   current_timestamp as snapshot_ts FROM user_gp.inv_room_type_inventory
WHERE    NOT EXISTS
  (SELECT id, hotel_id, room_type_id, date__, stop_sell, 
      inventory_count, created, modified__ 
   FROM sandbox.inv_room_type_inventory_snpsht
  );

有人可以协助

2 个答案:

答案 0 :(得分:2)

它无法正常工作的原因是因为您没有正确编写查询。基本上,当您的' sandbox.inv_room_type_inventory_snpsht'中没有记录时,您要求插入值。表。换句话说,即使沙盒中存在一条记录,也不会插入任何内容。

我假设您要检查您尝试插入的ID是否存在于' sandbox.inv_room_type_inventory_snpsht'表。在这种情况下,您需要在不存在的条件中添加where子句,因此,它看起来像:

WHERE NOT EXISTS (SELECT id, hotel_id, room_type_id, date__, stop_sell, inventory_count, created, modified__ 
FROM sandbox.inv_room_type_inventory_snpsht
WHERE id = user_gp.inv_room_type_inventory.id);

答案 1 :(得分:2)

使用NOT EXISTS而不是插入/选择最好使用MERGE,只需访问目标表,您可以在一个语句中执行INSERT和UPDATE。看看manuals

我不知道你的逻辑,但它看起来像:

MERGE INTO sandbox.inv_room_type_inventory_snpsht AS tgt
USING 
 (
   SELECT id, hotel_id, room_type_id, date__, stop_sell, 
      inventory_count, created, modified__, 
      current_timestamp as snapshot_ts 
   FROM user_gp.inv_room_type_inventory
 ) AS src
ON src.id = tgt.id
AND .....
WHEN NOT MATCHED THEN INSERT
VALUES (src.id, src.hotel_id, src.room_type_id,
        src.date__, src.stop_sell, 
        src.inventory_count, src.created, src.modified__,
        src.snapshot_ts
       )
 ;