文章目录

写在前面

我们都知道oracle有个rownum字段,可以记录行号,mysql是没有这个字段来记录行号的。
使用mysql想要知道行号怎么做?

伪列的使用

初步

可以看到,从-1开始累增1:

select 
@rownum := @rownum + 1 AS m
from mysql.help_topic,
(select @rownum := -1)

mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询_mysql

获取前几行

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

mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询_数据库_02

配合UNION的妙用

UNION获取几行数据

1、获取四行数据

select * from 
(select 1 union select 2 union select 3 union select 4)

mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询_数据库_03


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伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询_sql_04


mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询_数据_05

举一反三

mysql的伪列,在用到递增连表查询时,是非常方便的。
灵活运用伪列,可以解决并实现很多非常巧妙的场景。