1
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 语句,

有什么办法吗?

4

3 回答 3

2

不,这是不可能的。

PS:在一个语句中包含所有 3 个子句几乎不会被称为“查询优化”。优化是在您提高查询性能时,而不是在您只接受 N 个查询并将它们放在一个查询中时。

实际上这是新手之间的一个常见误解 - 更少的查询自动意味着它们会执行得更快。这是错误的。您应该有尽可能多的查询来检索所有必要的数据 - 不多也不少。

于 2012-08-31T03:03:51.520 回答
2

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

如果它们是事务,这将要求所有三个都工作。

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

于 2012-08-31T03:06:52.393 回答
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

我希望这会给你一些开始的想法。

于 2012-08-31T03:45:16.490 回答