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语句中,
有什么办法吗?
答案 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
我希望这会让你有所启动。