Я не уверен, что полностью следую, потому что, если вы вставляете строки в table1, table1.col3 еще не будет иметь значения для этих строк.Если вы просто хотите избежать использования table1.col3 = 2, вы можете использовать предложение where, например:
INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
WHERE table2.col3 <> 2
, что позволит избежать вставки значения 2 в table1.col3, поскольку table2.col3 - это место, где вывытаскиваешь.Если я здесь упускаю суть, дайте мне знать, но это должно сработать.
РЕДАКТИРОВАТЬ - учитывая, что вы сказали, что записи между table1 и table2 похожи, и предположим, что есть столбец, к которому можно присоединитьсямежду двумя таблицами вы можете сделать что-то вроде этого:
INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
LEFT OUTER JOIN table1 t1 ON tl.colX = table2.colX
WHERE table1.col3 <> 2
Идея состоит в том, что вы теперь включили table1 в ваш SELECT и, таким образом, можете также включить его в ваше предложение WHERE.(Простите, если для других разновидностей SQL отключен синтаксис псевдонимов, я в основном знаком с T-SQL.)