2016-02-19 62 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 
     ) 
;