mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询
原创
©著作权归作者所有:来自51CTO博客作者秃了也弱了的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
写在前面
我们都知道oracle有个rownum字段,可以记录行号,mysql是没有这个字段来记录行号的。
使用mysql想要知道行号怎么做?
伪列的使用
初步
可以看到,从-1开始累增1:
select
@rownum := @rownum + 1 AS m
from mysql.help_topic,
(select @rownum := -1)
获取前几行
select
@rownum := @rownum + 1 AS m
from mysql.help_topic,
(select @rownum := -1) t0
where @rownum < 9
获取近几天的日期(用于关联查询)
select
@rownum := @rownum + 1 AS m,
curdate() - INTERVAL @rownum DAY '日期'
from mysql.help_topic,
(select @rownum := -1) t0
where @rownum < 9
配合UNION的妙用
UNION获取几行数据
1、获取四行数据
select * from
(select 1 union select 2 union select 3 union select 4)
2、获取16行数据
select * from
(select 1 union select 2 union select 3 union select 4) t1,
(select 1 union select 2 union select 3 union select 4)
3、获取64行数据
select * from
(select 1 union select 2 union select 3 union select 4) t1,
(select 1 union select 2 union select 3 union select 4) t2,
(select 1 union select 2 union select 3 union select 4)
我们看到,是相乘的关系,想要不通过表获取单纯的行数,是可以用union来实现的。
获取近50天的日期(不使用其他表)
select
@rownum := @rownum + 1 AS m,
curdate() - INTERVAL @rownum DAY '日期'
from
(select 1 union select 2 union select 3 union select 4) t1,
(select 1 union select 2 union select 3 union select 4) t2,
(select 1 union select 2 union select 3 union select 4) t3,
(select @rownum := -1) t0
where @rownum < 49
举一反三
mysql的伪列,在用到递增连表查询时,是非常方便的。
灵活运用伪列,可以解决并实现很多非常巧妙的场景。