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

文章目录

  • 写在前面
  • 伪列的使用
    • 初步
    • 获取前几行
    • 获取近几天的日期(用于关联查询)
  • 配合UNION的妙用
    • UNION获取几行数据
    • 获取近50天的日期(不使用其他表)
  • 举一反三

写在前面

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

伪列的使用

初步

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

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

在这里插入图片描述

获取前几行

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获取近几天的日期用来连表查询_第1张图片

配合UNION的妙用

UNION获取几行数据

1、获取四行数据

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

在这里插入图片描述
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) t2

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) t3

我们看到,是相乘的关系,想要不通过表获取单纯的行数,是可以用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获取近几天的日期用来连表查询_第2张图片
在这里插入图片描述

举一反三

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

你可能感兴趣的:(mysql,mysql,数据库,sql)