mysql语句中with_sql中的with语句使⽤
⼀直以来都很少使⽤sql中的with语句,但是看到了⼀篇⽂章中关于with的使⽤,它的确蛮好⽤,希望以后记得使⽤这个语句。
⼀、with 的⽤法
With alias_name as (select1)[,alias_namen as (select n) ]--中括号可以省略
Select ….
举例,如下两表:
A B
ID NAME ID NAME
1 LI 1 LI
2 QIN
3 SUN
语句如下:
例1
with test_with as(select * from A) select * from B where B.id in(select id from test_with)
例2
with test_with1 as(select * from A),test_with2 as(select * from B)
简单的mysql语句select * from B where B.id in(select id from test_with1)
union all
select * from test_with2
[@more@]
⼆、with的相关总结
1.使⽤with⼦句可以让⼦查询重⽤相同的with查询块,通过select调⽤(with⼦句只能被select查询块引
⽤),⼀般在with查询⽤到多次情况下。在引⽤的select语句之前定义,同级只能定义with关键字只能使⽤⼀次,多个⽤逗号分割。
2.with⼦句的返回结果存到⽤户的临时表空间中,只做⼀次查询,反复使⽤,提⾼效率。
3.在同级select前有多个查询定义的时候,第1个⽤with,后⾯的不⽤with,并且⽤逗号隔开。
4.最后⼀个with ⼦句与下⾯的查询之间不能有逗号,只通过右括号分割,with ⼦句的查询必须⽤括号括起来
5.如果定义了with⼦句,⽽在查询中不使⽤,那么会报ora-32035 错误:未引⽤在with⼦句中定义的查询名。(⾄少⼀个with查询的name 未被引⽤,解决⽅法是移除未被引⽤的with查询),注意:只要后⾯有引⽤的就可以,不⼀定⾮要在主查询中引⽤,⽐如后⾯的with查询也引⽤了,也是可以的。
6.前⾯的with⼦句定义的查询在后⾯的with⼦句中可以使⽤。但是⼀个with⼦句内部不能嵌套with⼦句。
7.当⼀个查询块名字和⼀个表名或其他的对象相同时,解析器从内向外搜索,优先使⽤⼦查询块名字。
8.with查询的结果列有别名,引⽤的时候必须使⽤别名或*。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论