失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > sql中简简单单明明白白得使用 with temp as (select x from table1)

sql中简简单单明明白白得使用 with temp as (select x from table1)

时间:2019-05-29 13:22:11

相关推荐

sql中简简单单明明白白得使用 with temp as (select x from table1)

原创地址:/QQ826688096/article/details/89379997

今天在看博客得时候,发现了一个我不曾使用过得sql语法,感到很奇怪,就多看了几下。

发现还是很有用处得。

于是从地铁里出来后收起手机,直奔公司,打开电脑,使用了一下。

我去,上来就报错。

with temp_xs as (select xydm from xj_xsxxb where xh like'%001510%'),temp_js as (select xydm from sz_jsxxb where zgh like'%001510%')select t.* from dm_yxb twhere t.yxdm =temp_xs.xydm or t.yxdm =temp_js.xydm;

这么看上面得代码也没有什么问题啊。

我记得我看清楚人家语法了啊,差不多就是这么写的啊,难道是我的表里有什么东西?

于是流程式的检验一下:

1,检验基本语法;

2,去除无用字段;

3,将变量值改成常量值。

最后发现,都没有问题!!!

于是我再去好好看看人家的成功案例,经过逐字逐句的检查,发现了端倪。

一个不容易被发现的端倪:

with 子句获得的是一个【临时表,如果在查询中使用,必须采用select 字段名 from with得表名】】,

比如,下面这样得写法就是错误的:

With temp_count as(select count(*) as countt from table)Select temp_count+1 from dual;

下面才是正确的:

With temp_count as(select count(*) countt from user_tables)Select (countt+1) from temp_count;

于是,我终于找到原因了。修改后,可以执行了:

with temp_xs as (select xydm from xj_xsxxb where xh like'%001510%'),temp_js as (select xydm from sz_jsxxb where zgh like'%001510%')select t.* from dm_yxb twhere t.yxdm in(select xydm from temp_xs union select xydm from temp_js);

不过,我做了个对比,这种写法和 left join得写法得执行效率是一样得。没有得到提升,也没有拖后。下面就是传统的left join得写法,执行效率和with得一样的。

select t.* from dm_yxb tleft join (select xydm from xj_xsxxb where xh like'%001510%') temp_xs on temp_xs.xydm=t.yxdmleft join (select xydm from sz_jsxxb where zgh like'%001510%') temp_js on temp_js.xydm=t.yxdmwhere t.yxdm in(temp_xs.xydm) or t.yxdm in(temp_js.xydm);

语法讲解:

于是,我就去百度一下with temp as 得好处:

SQL可读性增强。比如对于特定with子查询取个有意义的名字等。with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能。

重要参考:/rosanu_blog/article/details/8288548

如果觉得《sql中简简单单明明白白得使用 with temp as (select x from table1)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。