У меня есть таблица, из которой я выбираю идентификаторы:
SELECT Ids
FROM C
WHERE C.Type = 6
Затем у меня есть много вставок с одинаковыми идентификаторами:
INSERT INTO D (x, y, z)
SELECT 20 as x, 2.90 as y, z FROM C WHERE Ids in (1, 2, 3, 4, 5, 6);
INSERT INTO D (x, y, z)
SELECT 11 as x, 33 as y, z FROM C WHERE Ids in (1, 2, 3, 4, 5, 6);
INSERT INTO D (x, y, z)
SELECT 12 as x, 2.11 as y, z FROM C WHERE Ids in (1, 2, 3, 4, 5, 6);
поскольку эти идентификаторы одинаковы, я хочу как-то его оптимизировать / сделать более читабельным, чтобы я не копировал и вставлял все эти идентификаторы (их несколько сотен). По этой причине я хотел бы объявить переменную типа таблицы, вставить эти идентификаторы в эту таблицу и при созданииINSERTS
выберите эти идентификаторы из этой таблицы. Однако я здесь новичок и действительно не понимаю, как мне это делать, и все примеры, которые я нахожу, кажутся сложными. Может ли кто-нибудь протянуть здесь руку помощи?
Как насчет того, чтобы сделать все вставки в одном операторе?
INSERT INTO D (x, y, z)
SELECT v.x, v.y, c.z
FROM C CROSS JOIN
(VALUES (20, 2.9), (11, 33), (12, 2.11)
) v(x, y)
WHERE Ids in (1, 2, 3, 4, 5, 6);
Вы также можете определить идентификаторы в CTE, а затем выполнить всеinserts
в одном заявлении:
with ids(id) as (
values (1, 2, 3, 4, 5, 6)
)
insert into d (x, y, z)
select 20, 2.9, c.z
from c
where c.id in (select id from ids)
union all
select 11, 33, c.z
from c
where c.id in (select id from ids)
union all
. . . ;