Table aaid    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   d02Table 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   红色   矩形   宝石

解决方案 »

  1.   

    distinct aname, apay, bname, cname,  dname
      

  2.   

    选择D的dname时,要求是怎么样的?任意一个还是固定的?
      

  3.   

    先不管什么关键字。你最后的结果如果有重复,如果想去除重复记录。那么就请 用
    distinct 另外如果你的d中没有重复的记录的话。查询结果就不会有重复的记录。因为只有d的主键不是 一个字段。先问一句。怎么会有重复的记录呢???????  不是说 did + dtype为唯一索引吗?
      

  4.   

    select
           aname,apay,bname,cname,dname
      from a,b,c,
           (select did,max(length(dname)) dname from d group by did) e
     where a.bid = b.bid and a.cid = c.cid and a.did = e.did
      

  5.   

    修改一下:
    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
      

  6.   

    再修改一下:
    select
           aname,apay,bname,cname,dname
      from a,b,c,
           (select did,dname 
              from d,(select did eid,min(length(dname)) dname_len from d group by did) e
             where d.did = e.eid and length(dname) = dname_len) f
     where a.bid = b.bid and a.cid = c.cid and a.did = f.did
      

  7.   

    yufeiyxl(与飞) 
    应该是正解
      

  8.   

    select a.aname,a.apay,b.bname,c.cname,d.dname
      from a,b,c,(select distinct did,dname 
              from d) d 
    where a.bid = b.bid and a.cid = c.cid and a.did = d.did
      

  9.   

    precipitant(塞北的雪) 也不错