如何使mysql关联查询返回结果集中相同字段不同数据只返回一条
发布网友
发布时间:2022-04-13 07:01
我来回答
共4个回答
懂视网
时间:2022-04-13 11:22
非常不错的方法,用mysql的group by解决不重复记录的问题,看来我需要学习的地方太多了
有个需求,一直没有解决,在google上找了半天,给出的方案没有一个能用了,最后鬼使神差搞定了。
是这样的,假设一个表:
id f_id value
1 2 a
2 2 b
3 5 c
4 9 c
5 9 a
6 6 d
id f_id value
1 2 a
2 2 b
3 5 c
4 9 c
5 9 a
6 6 d
id是主键,f_id是外键,我需要获得不重复的外键f_id的数据,如果用group by 或者distinct很容易搞定
select f_id from table group by f_id
select distinct f_id from table
但如果再想在结果中得到id值的话,不管怎么都会乱。比如我想在结果中用id进行排序,诸如”select distinct f_id, id from table order by id desc”完全白费。在google上看了大量的例子,发现需要在select中对id做手脚,让mysql知道除了f_id外,对id应该进行如何的操作。诸如Max, Min, Avg,Sun..都是可以的,于是变成以下的代码就搞定了……
select f_id, max(id) as id from table group by f_id order by id desc
搞定,网上有个文章很接近答案,但是他没有”as id”,导致在我的mysql中执行结果有误,呵呵。
热心网友
时间:2022-04-13 08:30
select *
from table ###where not exists (select * from table ###where # = #and ## < ##)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,只有用二重循环查询来解决。
给个例子把,比如:表table_a 4条数据id A B C D01 ab 1a2 1b2 12102 ab 2a3 3b3 4a103 ac 1a2 1b2 12104 ac 2a4 3b2 52g何让A字段重复取条 比01 ab 1a2 1b2 12103 ac 1a2 1b2 121
保留相同A值id行select *from table_a awhere not exists (select 1 from table_a bwhere b.A = a.Aand b.id < a.id)
热心网友
时间:2022-04-13 09:48
这个我也不知道呀,如果你的b表还有id=3.4···这些数据,查询的结果的列又要求要变吧,最好的办法就是写存储过程或者函数来处理。如果结果的列名是固定的就不用存储过程这些也能简单实现。
热心网友
时间:2022-04-13 11:23
select max(id) as id,fid,title,date from table group by fid,title,date