求一中等难度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