十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个问题的难点在于如何找出B表中每个关联字段组中的第一条记录,对于MYSQL我们可以利用自增ID(auto_increment)的特性予以解决。
创新新互联,凭借十余年的网站设计制作、网站制作经验,本着真心·诚心服务的企业理念服务于成都中小企业设计网站有超过千家案例。做网站建设,选成都创新互联。
因为MySql不支持rownumber()这类开窗函数(ACCESS可以利用FIRST函数),如果B表里没有自增ID的话,建议先创建一个与B表结构相同的表,同时添补一个自增ID字段,然后将B表中的记录全部追加到这个新表里,跟着我们就可以利用这个自增ID字段来解决问题了。
下面是利用自增ID特性的解决方案
假设A,B表的关联字段名为(R_ID ), B表里有一个自增ID字段(id)
select A.*,t2.* from A,
(select * from B,
(select min(id) as F_id from B group by R_ID)t
where B.id=t.F_id))t2
where A.R_ID=t2.R_ID
如果不想输出所有的字段,A.*,t2.*换成相应的具体字段即可
上面的代码也可以使用inner Join连接,但是经验告诉我其运行效率不如上面的写法高(不指定连接类型的等同连接)
MYSQL不利用自增ID的方法暂时未能找到。
开窗函数就有点麻烦了。
源代码:select t.*, ROW_NUMBER() OVER( PARTITION BY t.ticket_type ORDER BY t.open_ticket_time DESC ) as rn
from
term t
where
t.ticket_type in(
6, 5, 0, 1, **, *, **, **, *2, 2, 3, 4, 8, 7
)
and t.term_status = 5
这个代码的意思是根据open_ticket_time倒序的顺序将ticket_type 是( 6, 5, 0, 1, **, *, **, **, *2, 2, 3, 4, 8, 7)还有term_status = 5的数据对ticket_type 进行分组后排名ROW_NUMBER() 。
可通过多种方式进行实现
1、通过表自身进行实现
2、通过变量进行实现