在不存在的地方插入不起作用
Insert Where Not Exists not working
这是一个简单的 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
);
有人可以帮忙吗
它不起作用的原因是您没有正确编写查询。基本上,当 'sandbox.inv_room_type_inventory_snpsht' table 中没有记录时,您会要求插入值。所以,换句话说,即使'sandbox.inv_room_type_inventory_snpsht'中只有一条记录,它也不会插入任何东西。
我假设您想检查您尝试插入的 ID 是否存在于 'sandbox.inv_room_type_inventory_snpsht' table 中。在这种情况下,您需要在不存在的条件中添加一个 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);
与其使用 NOT EXISTS 的 Insert/Select,不如使用 MERGE,只需一次访问目标 table,您就可以在一个语句中执行 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
)
;
这是一个简单的 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
);
有人可以帮忙吗
它不起作用的原因是您没有正确编写查询。基本上,当 'sandbox.inv_room_type_inventory_snpsht' table 中没有记录时,您会要求插入值。所以,换句话说,即使'sandbox.inv_room_type_inventory_snpsht'中只有一条记录,它也不会插入任何东西。
我假设您想检查您尝试插入的 ID 是否存在于 'sandbox.inv_room_type_inventory_snpsht' table 中。在这种情况下,您需要在不存在的条件中添加一个 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);
与其使用 NOT EXISTS 的 Insert/Select,不如使用 MERGE,只需一次访问目标 table,您就可以在一个语句中执行 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
)
;