例如:
      table  :t_A
 id   name    record
  1     a       b
  2     c       d
  3     e       f       table  :t_b
 id     aid      count
  1      1         bb
  2      2         dd
  3      1         ff       table  :t_c
 id      aid        tlevel
  1       2            3
  2       3            1
  3       3            2
 问:我想把t_A与t_b表关联的数据和t_b与t_c 关联的数据放在一起查询出来,请问怎么写这条SQL?? 

解决方案 »

  1.   

    例如: 
          table  :t_A 
    id  name    record 
      1    a      b 
      2    c      d 
      3    e      f       table  :t_b 
    id    aid      count 
      1      1        bb 
      2      2        dd 
      3      1        ff       table  :t_c 
    id      bid        tlevel 
      1      2            3 
      2      3            1 
      3      3            2 
    问:我想把t_A与t_b表关联的数据和t_b与t_c 关联的数据放在一起查询出来,请问怎么写这条SQL?? 
    select *from  t_A,t_b where t_A.id=t_b.aidselect * from t_b,t_c where t_b.id=t_c.bid我意思是怎么能用一条语句完成,
      

  2.   


    select t_a.id,name,record,count,tlevel from t_a,t_b,t_c where ta.id=t_b.aid and t_a.id=t_c.aid
      

  3.   

    楼上的不可以吧,我的程序中,就这么用的,有好多数据没有查出来,我必须先把t_A表与t_b查出之后,和t_b表与t_c查后的,合在一起!
      

  4.   


    select a.id,a.name,a.record,b.aid,b.count,c.bid,b.tlevel from t_A as a,t_b as b,t_c as c where ta.id=t_b.aid and t_a.id=t_c.aid
      

  5.   

    上面改为select a.id,a.name,a.record,b.aid,b.'count',c.bid,c.tlevel from t_A as a,t_b as b,t_c as c where ta.id=t_b.aid and t_a.id=t_c.aid
      

  6.   

    哥哥们呀!
    SELECT t_user.uid, unickname, tlevel
    FROM t_user, t_guild_member
    WHERE t_guild_member.tuid = t_user.uid
    AND tgid = '13'
    GROUP BY t_user.uid DESC 结果1:
    uid  unickname  tlevel  6546 堕天 6 
    6516 泪痕 6 
    6479 洒泪 6 
    5987 一字邪王 6 
    5824 孙尖 6 
    5773 大飞 6 
    5620 撒旦的 6 
    5166 铜雀 6 
    4955 小曼 6 
    4890 皑皑 6 
    4803 鬼妹 6 
    4702 式工 6 
    4609 法规科个 6 
    4489 zcl 6 
    4472 龙也在天 6 
    4404 紫雨 6 
    1732 董俷 6 
    116 浪漫骑士 1 
    17 家园 6 
    SELECT t_user.uid, unickname, sum( credit ) 
    FROM t_user, t_donation_record
    WHERE t_donation_record.uid = t_user.uid
    GROUP BY t_user.uid结果2:uid  unickname  sum( credit )  
    9 流浪王 10 
    17 家园 2 
    43 铁血々守兰 200 
    52 邂逅de约定 105 
    75 铁血々雨点 10 
    87 逍遥之野 30 
    116 浪漫骑士 840 
    121 黑涩哭泣 5 
    133 ╱ゞ風雲灬炫 9000 
    136 H2oV 3 
    157 丶丶放荡大人 20 
    207 天下村长 10 
    219 ゞ風雲灬舞 100 
    231 惊鸿一少 17 
    249 风云 105 
    255 唯1的色彩 20 
    260 小菜 105 但是:
    如果我联合查询出来的是:SELECT t_user.uid, unickname,tlevel, sum( credit ) AS credit
    FROM t_donation_record, t_user, t_guild_member
    WHERE t_donation_record.uid = t_user.uid
    AND t_guild_member.tuid = t_user.uid
    AND tgid = '$gid'
    GROUP BY t_user.uid DESC
    结果:
    uid  unickname  tlevel  credit  
    116 浪漫骑士      1      840 
    17 家园           6       2 
    我的意思是结果1的加上 credit 没有数值为null; 
      

  7.   

      SELECT a.id, a.name, a.record, b.id, b.count, c.id, c.tlevel FROM t_A a 
       LEFT JOIN t_b b ON a.id = b.aid LEFT JOIN t_c c ON a.id = c.aid
      

  8.   

    的用join吧?也就是必须符合结果1的前提下,来查结果2,如果credit 没有数据,就用null但结果1的数据是不会变的,还的用一条SQL来OK,怎么办?
      

  9.   

    如果不想查询出null的结果,可以填加一个where 子句
    WHERE c.tlevel IS NOT NULL
      

  10.   

    select a.name,a.record,b.count,c.tlevel from t_A a left join t_b b on a.id=b.aid left join t_c c on b.id=c.bid
      

  11.   

    SELECT b.uid, b.unickname, c.tlevel, sum( a.credit ) AS credit
    FROM t_donation_record a
    LEFT JOIN t_user b ON a.uid = b.uid
    LEFT JOIN t_guild_member c ON b.uid = c.tuid
    WHERE c.tgid = '13'
    GROUP BY b.uid DESC 结果:
    uid  unickname  tlevel  credit  
    116 浪漫骑士 1 840 
    17 家园 6 28楼的,查出来还是两条数据呀??? 
      

  12.   

    楼上的把建表语句和测试数据帖出来,我给你调试一下.
    你是想要sum(credit)为0的数据都显示出来是吗?
      

  13.   

    select t_a.id,name,record,count,tlevel from t_a,t_b,t_c where ta.id=t_b.aid or t_a.id=t_c.aid
    把2楼的and换成or
      

  14.   

    数据非常多,
    我说明一下吧,我在t_guild_member 表里存储成员信息,无主键,t_user 表非常复杂,主键是uid   还有一个t_donation_record也就是记录user 有没有捐献过功勋。
    t_guild_member
    tgid  tuid  tlevel  
      6    5      1 
      11    7     6 
       4    9     6 
    t_donation_record
    id  uid  gid  credit  donation_time  
      1 249 1 105 2009-03-19 20:13:22 
      2 260 1 105 2009-03-19 20:16:07 
      3 272 1 105 2009-03-19 20:19:45 
      4 285 1 105 2009-03-19 20:23:49 
    我在HTML的表现行式是:把所有成员列出来,如果有捐献过功勋的,显示出来,没有的为0,所以这个SQL就是在查出所以成员的基础上,去查t_donation_record统计一下每个user总共捐了的数值,没有捐也可在HTML显示的,捐的显示出总数。在上面的回帖中我说明了一次,好像没表达好,呵呵,非常感谢!!
      

  15.   

    发表于:2009-06-26 17:11:5114楼 得分:0 
    楼上的把建表语句和测试数据帖出来,我给你调试一下. 
    你是想要sum(credit)为0的数据都显示出来是吗? 就是不管 sum(credit)为不为0它都要显示出来 的,
    还有,补充一下,有可能在t_donation_record里没有user的记录,但是,只要在t_guild_member的成员都要显示出来的!
      

  16.   

    sorry,没有测试数据,实在不好写,涉及三张表.
    另外,你多利用right join 和left join
      

  17.   

    好的,我也考虑的是用join 但还是没有写出来,如果在PHP中用程序来处理也是可以的,我觉得麻烦了,
      

  18.   


    select *from  t_A,t_b where t_A.id=t_b.aid
    UNION ALL
    select * from t_b,t_c where t_b.id=t_c.bid 
      

  19.   

    已经OK了,我把关联表查询顺序能反了,
    SELECT a.uid, a.unickname, b.tlevel, sum( c.credit ) AS credit
    FROM t_user a
    LEFT JOIN t_guild_member b ON a.uid = b.tuid
    LEFT JOIN t_donation_record c ON a.uid = c.uid
    WHERE b.tgid = '$gid'
    GROUP BY a.uid DESC
    谢谢各位了,特别是8楼的!