2016-02-19 5 views
1

Это простой оператор выбора, в котором я пытаюсь вставить любые новые обновления с меткой времени. По какой-то причине он просто не работает. Все выглядит нормально, но когда я тестирую запрос, он не работает.Вставка Где не существует

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» существует только одна запись, она ничего не добавит.

Я предполагаю, что вы хотите проверить, находится ли идентификатор, который вы пытаетесь вставить, в таблице «sandbox.inv_room_type_inventory_snpsht». В таком случае вам нужно добавить где положение внутри вашего не существует условие, так, что это будет выглядеть так:

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

Вместо вставки/Select с помощью 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 
     ) 
; 
Смежные вопросы