Вот два способа, которые избегают повторения подвыбора, но не являются строго «в одном запросе»:
1) Использовать временную переменную
SET @b = SELECT foo FROM someothertable WHERE somecondition;
INSERT INTO tablename(a, b) VALUES (
(1, @b),
(2, @b),
...
2) Используйте insert
для настройки столбца a
, затем используйте update
для установки столбца b
. Это может быть организовано во временную таблицу.
CREATE TEMPORARY TABLE tmp LIKE tablename;
insert into tmp(a) values (1),(2),...
update tmp set b = select foo from someothertable where some_condition;
insert into tablename(a,b) select * from tmp;