Я не вхожу в базу данных, и, может быть, я говорю что-то тривиальное.
Я работаю над MySql, и мне нужно реализовать "сложный" запрос INSERT.
Я имею в виду, что мне нужно сделать что-то вроде этого:
INSERT INTO MarketDetails_CommodityDetails
(market_detail_id, commodity_detail_id) VALUES
( XXX, YYY)
где XXX и YYY не являются простыми значениями, но являются результатом двух запросов SELECT, возвращающих одно значение (XXX возвращает запрос SELECT и YYY другим запросом).
Я знаю, что могу выполнять эти запросы, хранить выходные данные в переменной, а затем вызывать мой запрос вставки, передавая эти параметры, но я спрашиваю, есть ли способ автоматически сделать это в моем запросе INSERT.
Почему вы хотите использовать insert values
? просто выполните insert select
INSERT INTO MarketDetails_CommodityDetails(market_detail_id, commodity_detail_id)
select * from
(select --Complex select for XXX)
cross join
(select --Complex select for YYY)
Вы также можете использовать значения, если хотите. Удостоверьтесь, что вы используете 2 скобки вместо 1, и также обязательно используйте инструкцию ограничения, даже если ваш запрос всегда возвращает 1 строку.
INSERT INTO some_final_table (column1, column2) VALUES (
(SELECT some_column_1 FROM some_middle_table_1 LIMIT 1),
(SELECT some_column_2 FROM some_middle_table_2 LIMIT 1)
)
cross join
звучит немного страшно ... вместо этогоUNION ALL
будет умнее.UNION ALL
не имеет такого же эффекта вообще ... Результат будет 2 строки вместо 2 столбцов