如何按照如下排序导出记录?谢谢。(20分)

  • 主题发起人 主题发起人 cgs1980
  • 开始时间 开始时间
C

cgs1980

Unregistered / Unconfirmed
GUEST, unregistred user!
有如下两个表,表结构及记录如下:(以下两个表是为了说明我遇到的问题而构造的,大家可以暂时不考虑表结构设计是否合理)

table1

序号 姓名 课程 分数
1 王小强 语文 90
2 陈浩 数学 95
3 李明 英语 85
4 王小强 数学 90
5 李明 语文 80
.........

table2

序号 姓名 课程
1 王小强 语文
2 王小强 数学
3 李明 英语
4 李明 语文
5 陈浩 数学

我现在想将表 table1 中的记录按照表 table2 中的姓名顺序导出,我使用如下的sql语句进行导出:

q.SQL.Add('select table1.* from table1 as table1, table2 as table2 ');
q.SQL.Add('where table1.姓名 = table2.姓名');
q.SQL.Add('order by table2.序号 asc');

但出现记录重复,原因是 table1 中第 1 条记录与 table2 中第1条、第2条记录分别匹配,而 table1 中第 4 条记录又与 table2 中第1条、第2条记录分别匹配导致的,大家有什么方法可以将表 table1 中的记录按照表 table2 中的姓名顺序导出,同时又能使记录不发生重复呢?谢谢。
 
table2为主表,用做连接
select b.*,a.分数 from table2 b left join on table1 a on b.姓名=a.姓名 and b.课程=a.课程

提醒一下 你的表设计有问题
 
你的语句少加了两个表的课程相等的条件.
 
谢谢你的回复,我使用的是 delphi 7, Microsoft Access 数据库,运行以上 sql 语句提示 From 子句错误,正在努力测试,在我实际的表设计中,table2是保存了用户的设置信息,table1 则根据用户的设置信息,每天进行信息更新,如:

table1 :

序号 姓名 课程 分数 查询时间
1 王小强 语文 90 2008.5.11
2 陈浩 数学 95 2008.5.11
3 李明 英语 85 2008.5.12
4 王小强 数学 90 2008.5.12
5 李明 语文 80 2008.5.13
.......
有好的表设计建议,还希望多多指教!
 
谢谢大家的回复,现在可以了。

q.SQL.Add('select table1.* from table1 as table1, table2 as table2 ');
q.SQL.Add('where table1.姓名 = table2.姓名');
q.SQL.Add('and table1.课程 = table2.课程');
q.SQL.Add('order by table2.序号 asc');
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
605
import
I
I
回复
0
查看
473
import
I
后退
顶部