Скажем, у меня 3 запроса. Запрос 1 возвращает часть информации, требуемую Query 2 и Query 3. Есть ли способ для Query 2 и Query 3 получить доступ к этой части информации из результата запроса 1?
Сейчас у меня есть Query 1, выполняющийся дважды: один раз в Query 2 и один раз в Query 3. Мне это кажется неэффективным.
Есть ли лучший способ в MySQL?
ИЗМЕНИТЬ 1:
Например, скажем, Query 1 возвращает это:
Id
====
1
3
7
Теперь Query 2 и Query 3 нуждаются в 1, 3, 7 в своих индивидуальных предложениях WHERE.
Вы можете исключить возможность изменения набора результатов с помощью сериализуемой транзакции. Большинство баз данных поддерживают их; MySQL работает, если вы используете механизм хранения InnoDB. Перед выпуском первой проблемы запроса
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
команды. Когда вы завершили все утверждения, ROLLBACK;
.
Подробнее см. здесь http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html
Предполагая, что:
query1: select id from foo;
query2: select * from bar where id = #value#;
Вы можете просто написать query2 следующим образом:
select * from bar where id in (select id from foo);
У вас может возникнуть проблема, если элементы добавляются в foo между двумя запросами.