高分讨论关于多表排序的问题。(300分)

  • 主题发起人 主题发起人 gauss
  • 开始时间 开始时间
G

gauss

Unregistered / Unconfirmed
GUEST, unregistred user!
主从表,希望根据几个从表中的某个字段(不定)来对主表进行排序,要求以从表中的最新一条记录来排序(这个要求不只大家是否明白?)。
我的想法是:通过表的left join联结查询,并用order by 来排序。
我的问题是:使用联结查询时,如果主表中的纪录与从表中的记录是一对一的关系,那么能完成这项任务;如果主表中的记录和从表中的纪录是一对多,那么所查询出来的结果就会与希望的结果不符合,多记录出来,根本没达到要求。
希望各位能给个解决办法。另外,是否还有更好的方法?
 
嫌分少了?
各位不是这么现实吧?
 
何种数据库,都 不说,怎么写呀?
 
就用access了
 
select a.*,b.*
from a left join b
on a.id=b.id1 and b.id=(select max(b.id) from a,b where a.id=b.id1)
 
用的查询语句,主要看你的数据库是否支持一些高级特性了,

如果支持GROUP BY 的话,就很简单了,以一个关键字段进行分组,如果你要唯一的,就
加个 DISTINCT 查询参数吧;至于排序要按最新的来,,那么就只有按时间了的降序来了,,

你最好给出主、从表的几个字段,,这样就避免空谈了:)
 
主表:
id(key),Orderid,Name,Birthday,Age ....
1 1 name1 78/12/21 25 ...
2 2 name2 79/03/12 24 ...
3 4 name3 81/1/1 22 ...
4 3 name4 82/2/2 21 ...
...

从表1
id(key),orderid(key),EducationalBG,Major,GraduateSchool ...
1 1 大学专科 计算机 某大学A ....
1 2 大学本科 计算机 某大学B ....
2 1 大学专科 市场营销 某大学C ....
3 1 中专 计算机 某中专A ....
....

从表2
id(key),orderid(key),SalaryDate,Salary1,Salary2,Salary3...
1 1 2002.01 180 20 30 ...
1 2 2002.02 190 20 30 ...
1 3 2002.03 190 20 30 ...
2 1 2002.03 150 10 20 ...
3 1 2002.03 100 5 10 ...
...

从表3....从表N
4 ugvanxk:我已经试验了,但不知道这样的查询如果记录多了之后效率如何,如果实在没其他方法的话,也将就了,总算有个方法解决了!谢谢
4 HEYTOMMY:我说过了用access了,像GROUP BY是支持的。你说的用DISTINCT我曾试过,不管用!我将部分的表、数据粘贴上来了!不知你有什么好的主意?

希望大家能多多赐教!
 
哦,,看到了,,
先把DISTINCT 加到ugvanxk的语句上,改一点,,不知道行不行?

对ugvanxk的改动:
select a.*,b.*
from a left join b
on a.id=b.id1 and b.id=(select max(DISTINCT b.id) from a,b where a.id=b.id1)

然后我先建个主从表,我先研究研究再发言了哈!
 
再废话一句,然后下线去研究研究效率的问题!!

可以先将从表整理了再查询可能要好些,也就是先预处理一下,我的想法是:如果一个完整的
工作难度太大,是否可以将其分解为小些的来完成呢?
 
2 heytommy,实际上对ugvanxk的修改上用不着DISTINCT ,因为子查询里用了max()
另外,期待你说的预处理方案!谢谢
 
哦,,,,

我试了一下,,,,如果要用一句查询语句来完成预处理和查询,,,我看是办不到了,,
可以先将要查询的表整理一下,生成一个临时表,这个临时表保证记录唯一并且为最新记录,
然后的查询语句在这个临时表上进行,,,,语句也差不多了,,

哎呀,,,,看来我没学好,,,,丢脸:((((
 
用order by不好实现,还是换成索引关联比较好
 
TO HEYTOMMY,你已经动脑筋了,我很感谢!其实没什么丢脸的,我也是没学好,大家共同进步嘛
TO LBD,你能具体的讲述以下利用索引关联好吗?我不是对这不了解!
 
to gauss:

我原本认为可以找到更好的方法的,但我仔细考虑了一下,没有找到,我考虑过去考虑过来,

和ugvanxk的差不多,哎呀,,,我该先找到了更好地再提出来也不晚的!
 
不需要写SQL语句,假设你的主表的QUERY是MQUERY,从表的是SQUERY,
mquery.sort := squery.fields.fieldname+...+squery.fields[i+j].fieldname
 
后退
顶部