向高手请教一个SQL多表关联查询排序的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向高手请教一个SQL多表关联查询排序的问题相关的知识,希望对你有一定的参考价值。

有这样一个多表查询,查询表A,$key是接收的关键字,当B.key=$key才允许外连接B表,然后对B.cid进行DESC排序,请问这样的SQL语句如何写?
补充一下:
B是对A中查询到符合$key的同时才关联B并且对B.cid 进行DESC排序的
必须满足B.key=$key才可以关联B表并且进行B.cid DESC
而且不可以WHERE B.key=$key
我现在就需要这样的语句。。。
例示这样:select * from A inner join(select * from B where key=$key ) on a.cid = b.cid order by b.cid desc (这个SQL是错误的)

select a.*,b.*
(可以选择字段名称,注意两个表中重名的字段一定要加a.或b.,其他不重名的可以不加,但是为了以后的拓展,最好都加)
from [表A] as a left join [表B] as b
on a.$key=b.key
order by b.cid desc
(这样的话当b表中的b.key不在a表中的时候,b.*的字段都是空的,如果想改成你期望的类型,可以使用isnull函数,比如isnull(b.key,0)或isnull(b.key,\'无\')
参考技术A select a.*,b.cid from a inner join on a.关联字段 = b.关联字段 where b.key = $key order by b.cid desc

sql多表分组查询并排序的问题

假设有三张表:

tb1

sID name

tb2
sID tID name

tb3
tID name time

tb2和tb1根据sID关联,tb3和tb2根据tID关联

我想写一个sql语句:根据tb1的sID分组分别得到tID,然后获取各sID下的tID,最后根据tb3的time(smalldatetime)排序得到各分组的第一个tb3的name的数据(就是我想取到各Sid下的最后时间的name)

select sID,name,time from (
select tb1.sID,tb2.tID,tb3.name,tb3.time
,row_number() over (partition by tb1.sID order by tb3.time desc) seq
from tb1 a
inner join tb2 b on a.sID=b.sID
inner join tb3 c on b.tID=c.tID
) t where seq=1

参考技术A 标识一下各表的主键,from 数据库,group by 升序或者降序 参考技术B 请把各表的 主键 标示一下 group by order by top 1
并且把 使用的数据库 也说一下

以上是关于向高手请教一个SQL多表关联查询排序的问题的主要内容,如果未能解决你的问题,请参考以下文章

sql多表分组查询并排序的问题

sql 多表关联查询

JPA多表关联 去重 排序问题

sql多表关联查询

Oracle - 查询语句 - 多表关联查询

sql mysql多表如何关联查询