2016-02-19 119 views
1

这是一个简单的select语句,我试图插入任何具有时间戳的新更新。由于某种原因,它似乎不起作用。一切看起来都很好,但是当我测试查询时,它似乎不起作用。插入不存在不起作用

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

它不工作的原因是因为你不写的查询权。基本上你要求在'sandbox.inv_room_type_inventory_snpsht'表中没有记录时插入值。换句话说,即使'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); 
+0

得到它。它像一个相关的子查询mroe ..谢谢 – Kash

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 
     ) 
;