0

我想问你关于microsoft access 中的sql 语法。

我想要的是:

kdploting kdsubject nmsubject nmlecture
kp001 km001 xx a
kp001 km002 年年 b
kp001 km003 zz c

mysql语法是:

select distinct(d.kdploting), c.kdsubject, a.nmsubject, b.nmlecture 
from subject a, mstlecture b, 
transplotingdetail c, transplotingheader d 
where d.kdploting = 'kp001' 
and d.kdploting = c.kdploting 
and c.kdsubject = a.kdsubject 
and d.kdlecture = b.kdlecture;

结果 :

kdploting kdsubject nmsubject nmlecture
kp001 km001 xx a
kp001 km001 xx b
kp001 km001 xx c
kp001 km002 年年
kp001 km002 年年 b
kp001 km002 yy c
kp001 km002 zz
kp001 km002 zz b
kp001 km002 zz c

我不想要这样的结果,所以有人可以解释一下为什么会发生这种情况吗?什么是正确的 sql 查询?

多谢你们!

注意:我的 vb.net 程序真的需要这个查询,谢谢大家!

这是我的桌子:

学科
    kdsubject nmsubject
    公里001 xx
    km002 年
    km003 兹

结构
    讲义
    kd001一
    kd002 b
    kd003 c

移植细节
    kdploting kdmatakuliah
    kp001 公里001
    kp001 km002
    kp001 公里003
    kp002 公里001
    kp002 km002
    kp002 公里003
    ...

转标头
    kdploting klecture
    kp001 kd001
    kp001 kd002
    kp001 kd003
    kp002 kd001
    kp002 kd002
    kp002 kd003    
    ...

我想要的是这样的

kdploting kdsubject nmsubject nmlecture
kp001      km001         xx a
kp001      km002 年年        b
kp001 km003 zz c
4

1 回答 1

1

为了方便使用,我缩短/更改了表格/主题名称。但使用与您的样本相同的数据。SQL Server 最好的部分是Row_Number():) 因为查询是在 SQL Server 中完成的,所以我利用了它。SQL Server 语法更符合 MS ACCESS。因此,查询中最重要的部分是确保基于 distinctsubjectid和对内部记录进行排名/编号lectureid。请看一下

* SQLFIDDLE 演示

询问:

select y.did, x.lid, x.lname,
y.sid, y.sname from
(select ROW_NUMBER() OVER (ORDER BY a.lid) AS Row,
 a.lid, a.lname, b.did
from mstl a
left join (select distinct lid, did from 
           th) as b
on b.lid = a.lid
where b.did = 'kp001') as x
join
(select ROW_NUMBER() OVER (ORDER BY c.sid) AS Row,
 c.sid, c.sname, d.did
from subject c
left join (select distinct sid, did from 
           td) as d
on d.sid = c.sid
where d.did = 'kp001') as y
on x.row = y.row
;

结果:

DID     LID     LNAME   SID     SNAME
kp001   kd001   a       km001   xx
kp001   kd002   b       km002   yy
kp001   kd003   c       km003   zz
于 2012-12-25T21:44:16.033 回答