当前位置:网站首页>MySQL复杂查询使用临时表/with as(类似表变量)
MySQL复杂查询使用临时表/with as(类似表变量)
2022-04-23 02:39:00 【一只努力xx的程序媛】
查询需求:
如果第一个SQL能查出结果,则返回结果,否则,执行第二条SQL,返回第二条SQL的结果。
SQL Server中使用表变量的方式:
如果查出有“wangwang”用户则返回,否则查询“zhangzhang”用户的id返回。有优先级
declare @temp table(id int)
insert into @temp
select id
from user
where name = 'wangwang'
if not exists(select id from @temp)
begin
select id
from user
where name='zhangzhang'
end else
begin
select id from @temp
end
MySQL中没有表变量,只能使用临时表代替:
CREATE TEMPORARY TABLE temp1(id int ); -- 创建临时表1
insert into temp1
select id
from user
where name='wangwang';
CREATE TEMPORARY TABLE temp2(id int ); -- 创建临时表2
insert into temp2
select id
from user
where name='zhangzhang';
CREATE TEMPORARY TABLE temp1_re select id from temp1; -- 复制临时表1
select (case when (SELECT count(*) FROM temp1_re)>0 then -- 使用case when判断
(select id from temp1 order by id desc limit 1) else (
select id from temp2 order by id desc limit 1) end ) id ;
注意:
(1)需要复制临时表1,是因为“在同一个query语句中,你只能查找一次临时表”,否则报错“can’t reopen ”。针对表中数据不多的情况下,可以复制表进行操作。
(2)因为要在mybatis的xml中执行多条SQL,数据库连接需要设置allowMultiQueries=true。
2019-10-29更新:
发现MySQL有个类似SQLserver中的表变量的语句,那就是with as,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到,例如:
with temp_a as(
select id,name from user where name='wangwang'
),
temp_b as(
select id,name from user where name='zhangzhang'
)
select (case when (SELECT count(*) FROM temp_a)>0 then -- 使用case when判断
(select id from temp_a order by id desc limit 1)
else
(select id from temp_b order by id desc limit 1)
end
) id
这种写法是MySQL 8.0的特性
参考:https://www.cnblogs.com/Niko12230/p/5945133.html
https://stackoverflow.com/questions/324935/mysql-with-clause
版权声明
本文为[一只努力xx的程序媛]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_23888451/article/details/102686280
边栏推荐
猜你喜欢

机器学习(周志华) 第十四章概率图模型

The usage and difference of * and & in C language and the meaning of keywords static and volatile

本地远程访问云服务器的jupyter

Modify the content of MySQL + PHP drop-down box
![Handwritten memory pool and principle code analysis [C language]](/img/9e/fdddaa628347355b9bcf9780779fa4.png)
Handwritten memory pool and principle code analysis [C language]

011_ Redistemplate operation hash

005_ redis_ Set set
Rich intelligent auxiliary functions and exposure of Sihao X6 security configuration: it will be pre sold on April 23
![[wechat applet] set the bottom menu (tabbar) for the applet](/img/e2/98711dfb1350599cbdbdf13508b84f.png)
[wechat applet] set the bottom menu (tabbar) for the applet

012_ Access denied for user ‘root‘@‘localhost‘ (using password: YES)
随机推荐
How to solve the complexity of project document management?
Fashion MNIST 数据集分类训练
Jupyter for local and remote access to ECS
If you want to learn SQL with a Mac, you should give yourself a good reason to buy a Mac and listen to your opinions
Execute external SQL script in MySQL workbench and report error
LeetCode 1450 - 1453
Modification du contenu de la recherche dans la boîte déroulante par PHP + MySQL
How to recognize products from the perspective of Dialectics
Parental delegation model [understanding]
小程序 读取文件
JDBC JDBC
Interpretation of the future development of smart agriculture
C语言 171. 最近回文数
Download the genuine origin Pro 2022 tutorial and how to activate it
Arduino esp8266 network upgrade OTA
Day 4 of learning rhcsa
Understanding process (multithreading primary)
牛客手速月赛 48 C(差分都玩不明白了属于是)
010_ StringRedisTemplate
双亲委派模型【理解】