日期:2014-05-17  浏览次数:20810 次

求一中等难度sql
Table   a

aid         aname       apay       bid       cid       did
a001       dabao       99.8       b01       c01       d01
a001       dabao       99.3       b01       c02       d02
a002       dabao       94.3       b01       c02       d02

Table   b   (bid   为唯一)
bid         bname
b01         红色
b02         绿色
...

Table   c   (cid   为唯一)
cid         cname
c01         圆形
c02         矩形
...

Table   d   (did   +   dtype   为唯一)
did         dname         dtype
d01         玻璃           大片
d01         碎玻璃       小片
d02         宝石           大块
d02         碎宝石       小块
...

进行联合查询:
aid   等于   a001的记录

关键在于d表did不是唯一,   加dtype才是唯一索引,   简单的连接查询,   最后结果有重复记录.
aname,   apay,   bname,   cname,     dname
dabao       99.8       红色       圆形       玻璃
dabao       99.3       红色       矩形       宝石
dabao       99.8       红色       圆形       玻璃
dabao       99.3       红色       矩形       宝石

如何构建Sql才能得到:
返回列:
aname,   apay,   bname,   cname,     dname
dabao       99.8       红色       圆形       玻璃
dabao       99.3       红色       矩形       宝石


------解决方案--------------------
distinct aname, apay, bname, cname, dname
------解决方案--------------------
先不管什么关键字。你最后的结果如果有重复,如果想去除重复记录。那么就请 用
distinct

另外如果你的d中没有重复的记录的话。查询结果就不会有重复的记录。

因为只有d的主键不是 一个字段。

先问一句。怎么会有重复的记录呢??????? 不是说 did + dtype为唯一索引吗?


------解决方案--------------------
修改一下:
select
aname,apay,bname,cname,dname
from a,b,c,
(select did,min(length(dname)) dname from d group by did) e
where a.bid = b.bid and a.cid = c.cid and a.did = e.did