mysql中只知道id,如何获取分类下的全部记录,要求用一条sql语句

mysql中只知道id,如何获取分类下的全部记录,要求用一条sql语句,第1张

如果一个id对应多个class

select from 表 where class in(select class from 表 where id='1')

如果一个ID对一个class

select from 表 where class=(select class from 表 where id='1')

为每一行记录添加行号

方法一:

为了实现row_number函数功能,此方法我们要使用到会话变量,下面的实例是从 employees 表中选出5名员工,并为每一行添加行号:

1

2

3

4

5

6

SET@row_number = 0;

SELECT

(@row_number:=@row_number + 1) ASnum, firstName, lastName

FROM

employees

LIMIT 5;

输出结果:

在这个实例中:

首先,定义变量 @row_number ,并初始化为0;

然后,在查询时我们为 @row_number 变量加1。

方法二:

这种方法仍然要用到变量,与上一种方法不同的是,我们把变量当做派生表,与主业务表关联查询实现row_number函数功能。下面我们仍然以查询5位员工为例:

1

2

3

4

5

SELECT

(@row_number:=@row_number + 1) ASnum, firstName, lastName

FROM

employees,(SELECT@row_number:=0) ASt

LIMIT 5;

这样的输出结果与上一种结果是一致的。

需要注意的是,在这种方法中,派生表必须要有别名,否则执行时会出错。

为每一组添加行号

了解ORACLE的朋友应该知道,row_number函数还有一个非常有用的功能就是分组排序 “over partition by” 。MySQL同样可以实现这样的功能,看下面的实例:

首先将payments表中按照客户将记录分组:

1

2

3

4

5

SELECT

customerNumber, paymentDate, amount

FROM

payments

ORDERBYcustomerNumber;

输出结果如下:

下面我们需要将每个客户添加一个行号,这里我们需要用到两个变量,一个用于存储行号,一个用于存储客户编号,如:

1

2

3

4

5

6

7

8

9

10

11

SELECT

@row_number := CASE

WHEN@customer_no = customerNumber THEN@row_number + 1

ELSE1

ENDASnum,

@customer_no := customerNumber asC

你把表考到SAP系统里面然后执行以下代码。

SELECT INTO itab

FROM table

ORDER BY votecount desc

LOOP AT itab

IF itab-useri = useri

WRITE:/ sy-index

ENDIF

ENDLOOP

为每一行记录添加行号

方法一:为了实现row_number函数功能,此方法我们要使用到会话变量,下面的实例是从 employees 表中选出5名员工,并为每一行添加行号:

1

2

3

4

5

6

SET@row_number = 0;

SELECT

(@row_number:=@row_number + 1)  ASnum, firstName, lastName

FROM

employees

LIMIT  5;

输出结果:

在这个实例中:首先,定义变量 @row_number ,并初始化为0;然后,在查询时我们为 @row_number 变量加1

方法二:这种方法仍然要用到变量,与上一种方法不同的是,我们把变量当做派生表,与主业务表关联查询实现row_number函数功能。下面我们仍然以查询5位员工为例:

1

2

3

4

5

SELECT

(@row_number:=@row_number + 1) ASnum, firstName, lastName

FROM

employees,(SELECT@row_number:=0) ASt

LIMIT 5;

这样的输出结果与上一种结果是一致的。需要注意的是,在这种方法中,派生表必须要有别名,否则执行时会出错。为每一组添加行号。了解ORACLE的朋友应该知道,row_number函数还有一个非常有用的功能就是分组排序 “over partition by” 。MySQL同样可以实现这样的功能,看下面的实例:首先将payments表中按照客户将记录分组:

1

2

3

4

5

SELECT

customerNumber, paymentDate, amount

FROM

payments

ORDERBYcustomerNumber;

输出结果如下:下面我们需要将每个客户添加一个行号,这里我们需要用到两个变量,一个用于存储行号,一个用于存储客户编号,如:

1

2

3

4

5

6

7

8

9

10

11

SELECT

@row_number := CASE

WHEN@customer_no = customerNumber  THEN@row_number + 1

ELSE1

ENDASnum,

@customer_no := customerNumber  asC

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。

具体步骤如下:/导致这种情况的原因主要是……

这里记录一个问题

在MySQL中,我们要查看前3条记录的话,是使用limit

简单的分页也可以使用力limit来完成

这都比较常见,如果我们想要获取数据的前10%呢?

在SQLServer中,我们可以直接使用top 10 percent 就可以了,但在MySQL中,我们得另想办法

前10%的数据,我们得知道数据一共有多少,那我们就知道该获取多少条记录了,然后还得知道记录的行号。

@row_num这个变量,是按行来的,所以我们再where条件中使用的时候,他是最后1条记录的行号,及总记录数

总记录数乘以50%,就是前50%的记录数,这样,我们就获取了前X%数据,做完收工。

mysql的limit是可以指定位置开始,然后还可以指定去多少调记录的。

select from users limit 1,10就是从第一条,取10条。

select from users limit 10,10就是从第十条,取10条。

怎么取都行。你看看。

读取mysql数据库文本字段的值方法如下:

publicvoidread(){

try{

//连接数据库

conn=JdbcUtils();

//查询resume字段,text格式

Stringsql="selectresumefromtestclobwhereid=1";

pt=conn(sql);

//执行查询并返回结果

rs=pt();

if(rsnext()){

//rs读取该字段

Readerreader=rs("resume");

//定义字符数组来存放读取值

charbuffer[]=newchar[1024];

while((readerread(buffer))!=-1){

//打印

Systemoutprintln(buffer);

}

readerclose();

}

}catch(Exceptione){

e();

}finally{

JdbcUtilsrelease(conn,pt,rs);

}

}

以上就是关于mysql中只知道id,如何获取分类下的全部记录,要求用一条sql语句全部的内容,包括:mysql中只知道id,如何获取分类下的全部记录,要求用一条sql语句、mysql 怎么才能做到rownumber序号、mysql获取记录在哪一行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10136206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存