Как я могу реализовать «сложный» запрос INSERT, который извлекает значения, вызывающие другие запросы?

0

Я не вхожу в базу данных, и, может быть, я говорю что-то тривиальное.

Я работаю над MySql, и мне нужно реализовать "сложный" запрос INSERT.

Я имею в виду, что мне нужно сделать что-то вроде этого:

INSERT INTO MarketDetails_CommodityDetails
(market_detail_id, commodity_detail_id) VALUES 
( XXX, YYY)

где XXX и YYY не являются простыми значениями, но являются результатом двух запросов SELECT, возвращающих одно значение (XXX возвращает запрос SELECT и YYY другим запросом).

Я знаю, что могу выполнять эти запросы, хранить выходные данные в переменной, а затем вызывать мой запрос вставки, передавая эти параметры, но я спрашиваю, есть ли способ автоматически сделать это в моем запросе INSERT.

Теги:
database
rdbms

2 ответа

3
Лучший ответ

Почему вы хотите использовать 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)
  • 0
    использование cross join звучит немного страшно ... вместо этого UNION ALL будет умнее.
  • 0
    @RaymondNijland За исключением того, что UNION ALL не имеет такого же эффекта вообще ... Результат будет 2 строки вместо 2 столбцов
Показать ещё 1 комментарий
1

Вы также можете использовать значения, если хотите. Удостоверьтесь, что вы используете 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)
)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню