INSERT INTO ... VALUES () 当不存在时
INSERT INTO ... VALUES () when not exists
我有插入:
INSERT INTO barrier
(barrier_id,
usage_id,
type_id,
currency_id,
modified_date,
version_nr)
VALUES (barrier_seq.nextval,
(SELECT usage_id
FROM usages
WHERE id =
(SELECT id
FROM products
WHERE identifier =
(SELECT identifier
FROM identifiers
WHERE type_id =
(SELECT type_id
FROM types
WHERE NAME = 'New product')
AND LOCATION = 'USA')
AND status = 'DONE')),
(SELECT type_id FROM types WHERE name = 'My name'),
5,
CURRENT_TIMESTAMP,
3);
我知道当 INSERT
中有 SELECT
而不是 VALUES()
(Oracle insert if not exists statement) 时我可以使用 where not exists
。在这种情况下,如果不将此 INSERT ... VALUES()
更改为 INSERT... SELECT
是否有可能?
使用insert . . . select
并在SELECT
的末尾添加条件:
INSERT INTO barrier (barrier_id, usage_id, type_id, currency_id, modified_date, version_nr)
SELECT barrier_seq.nextval, usage_id,
(SELECT type_id FROM types WHERE name = 'My name'),
5, CURRENT_TIMESTAMP, 3)
FROM usages
WHERE id = (SELECT id
FROM products
WHERE identifier =
(SELECT identifier
FROM identifiers
WHERE type_id =
(SELECT type_id
FROM types
WHERE NAME = 'New product'
) AND
LOCATION = 'USA'
) AND
status = 'DONE'
) AND
NOT EXISTS ( . . . );
我有插入:
INSERT INTO barrier
(barrier_id,
usage_id,
type_id,
currency_id,
modified_date,
version_nr)
VALUES (barrier_seq.nextval,
(SELECT usage_id
FROM usages
WHERE id =
(SELECT id
FROM products
WHERE identifier =
(SELECT identifier
FROM identifiers
WHERE type_id =
(SELECT type_id
FROM types
WHERE NAME = 'New product')
AND LOCATION = 'USA')
AND status = 'DONE')),
(SELECT type_id FROM types WHERE name = 'My name'),
5,
CURRENT_TIMESTAMP,
3);
我知道当 INSERT
中有 SELECT
而不是 VALUES()
(Oracle insert if not exists statement) 时我可以使用 where not exists
。在这种情况下,如果不将此 INSERT ... VALUES()
更改为 INSERT... SELECT
是否有可能?
使用insert . . . select
并在SELECT
的末尾添加条件:
INSERT INTO barrier (barrier_id, usage_id, type_id, currency_id, modified_date, version_nr)
SELECT barrier_seq.nextval, usage_id,
(SELECT type_id FROM types WHERE name = 'My name'),
5, CURRENT_TIMESTAMP, 3)
FROM usages
WHERE id = (SELECT id
FROM products
WHERE identifier =
(SELECT identifier
FROM identifiers
WHERE type_id =
(SELECT type_id
FROM types
WHERE NAME = 'New product'
) AND
LOCATION = 'USA'
) AND
status = 'DONE'
) AND
NOT EXISTS ( . . . );