Я бы предложил INSERT ... SELECT следующим образом:
INSERT into table2 (table1_id, column3, column4)
SELECT t1.id, s.str, s.str
FROM table1 AS t1
CROSS JOIN (SELECT "fizz" AS str UNION SELECT "buzz" UNION SELECT "hello world") AS s
LEFT JOIN table2 AS t2 ON t1.id = t2.table1_id AND s.str = t2.column3
WHERE t1.thing1 = true
AND t2.id IS NULL -- Only insert when they are not already present
;
Однако это не гарантирует, что строки будут вставлены в указанном вами порядке.
У меня есть У меня не было особого требования использовать CROSS JOINs, поэтому я не уверен, насколько хорошо они играют с левыми соединениями, поэтому, если вышеприведенное не сработает, вот несколько альтернатив ниже:
INSERT into table2 (table1_id, column3, column4)
SELECT t1.id, s.str, s.str
FROM table1 AS t1
CROSS JOIN (SELECT "fizz" AS str UNION SELECT "buzz" UNION SELECT "hello world") AS s
WHERE t1.thing1 = true
AND (t2.id, s.str) NOT IN (SELECT table1_id, column3 FROM table2 )
;
или
INSERT into table2 (table1_id, column3, column4)
SELECT t1.id, s.str, s.str
FROM table1 AS t1
CROSS JOIN (SELECT "fizz" AS str UNION SELECT "buzz" UNION SELECT "hello world") AS s
WHERE t1.thing1 = true
AND NOT EXISTS (
SELECT *
FROM table2 AS t2
WHERE t2.table1_id = t1.id AND t2.column3 = s.str
)
;
Если Sql Сервер, подзапрос объединения (включая окружающие скобки и псевдоним) можно заменить на (VALUES ('fizz'), ('buzz'), ('hello word')) AS s(str)
.