有没有办法将这三个sql语句合并为单个sql语句

时间:2012-08-31 03:01:22

标签: mysql sql

select b.b_id from btable b inner join atable a on b.b_id = a_id
go
delete from btable where b_id in (...)
go
insert into btable select * from atable where a_id in (...)
go

第二个和第三个sql语句的条件是第一个sql查询结果,

现在我想将这三个sql语句合并到单个sql语句中,

有什么办法吗?

3 个答案:

答案 0 :(得分:2)

不,这是不可能的。

PS:在一个声明中将所有3个子句都称为“查询优化”。优化是指在提高查询性能时,而不是在您只进行N次查询并在单个查询中获取它们时。

实际上,这是新手之间的一个常见误解 - 自动化程度越低,他们的表现就越快。这是错的。您应该拥有所需数量的查询来检索所有必要的数据 - 而不是更少而不是更多。

答案 1 :(得分:2)

问题是为什么 - 如果它们都必须按顺序执行,那么你可以将它们分组为交易(如果它们是相关的) - 但这取决于你的表引擎

如果这是交易,这将要求所有三个都有效。

同样在事务中,您可以测试sql命令的结果,并决定是否需要/需要继续它

答案 2 :(得分:1)

我相信,合并是不可能的,但你可以做的是将初始结果集放入临时表并重用它。

CREATE TEMPORARY TABLE tbl (b_id int)

select b.b_id into tbl from btable b inner join atable a on b.b_id = a_id

delete from btable where b_id in (select b_id from tbl)

insert into btable select * from atable where a_id in (select b_id from tbl)

drop table tbl

我希望这会让你有所启动。