说我有3个查询。查询1返回查询2和查询3需要的一条信息。查询2和查询3是否有办法从查询1的结果中访问这条信息?
现在,我有一次查询1执行两次:一次在查询2中,一次在查询3中。这对我来说似乎没有效率。
MySQL有更好的方法吗?
编辑1:
例如,假设查询1返回:
Id
====
1
3
7
现在,查询2和查询3在其各自的WHERE子句中需要1,3,7。
答案 0 :(得分:0)
假设:
query1: select id from foo;
query2: select * from bar where id = #value#;
您可以像这样编写query2:
select * from bar where id in (select id from foo);
如果在运行两个查询之间将项目添加到foo,则可能会出现问题。
答案 1 :(得分:0)
您可以通过使用可序列化的事务来消除结果集更改的可能性。大多数数据库支持这些如果您使用InnoDB存储引擎,MySQL会执行此操作。在发出第一个查询之前发出一个
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
命令。完成所有陈述后,ROLLBACK;
。
有关详细信息,请参阅此处... http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html