play比赛表
p_id--------tn1--------tn2--------bTime
1------------1----------2----------1232343452
2------------3----------4----------1232343420team球队表
t_id--------name_en------------name_cn
1-----------China--------中国
2-----------USA----------美国
3-----------Aussie-------澳大利亚
4-----------Canada-------加拿大into进球表
i_id--------ball----------i_time
1------------0------------10
1------------0------------16
1------------1------------23
1------------0------------80
2------------1------------50
2------------1------------67想得到的结果:
p_id--------tn1------------tn2------------H------------G------------bTime
1-----------中国------------美国----------3------------1------------1232343452
2-----------澳大利亚--------加拿大--------0------------2------------1232343420说明一下结果得到的:
into.i_id对应play.p_id;ball记录是哪一方得分,0表示play.tn1,1表示play.tn2。
H的结果是由count(play.p_id=into.i_id AND into.ball=0)而来;
G的结果是由count(play.p_id=into.i_id AND into.ball=1)而来。下面的语句是由CSDN上的ccssddnnhelp写的但当时我问时没有连接into表
select p.id,t1.name_cn,t2.name_cn,p.bTime
from (play as p inner join team as t1 on p.tn1=t1.id)
    inner join team as t2 on p.tn2=t2.id

解决方案 »

  1.   

    SELECT a.*,b.name_cn,c.name_cn,h,g from play a
    left join team b on a.tn1=b.t_id
    left join team c on a.tn2=c.t_id
    left join 
    (SELECT i_id,sum(iif(ball=0,1,0)) as h,sum(iif(ball=1,1,0)) as g from [into] group by i_id) d
    on a.p_id=d.i_id
      

  2.   

    不知为什么我在SQLyog上使用wwwwb提供的方法一直出错,提示没有iif函数,我改了下可以正常使用了
    SELECT p.id,t1.name_cn AS tn1,t2.name_cn AS tn2,H,G,p.bTime
    FROM (play AS p INNER JOIN team AS t1 ON p.tn1=t1.id)
        LEFT JOIN team AS t2 ON p.tn2=t2.id
        RIGHT JOIN (SELECT p_id,sum(if(ball=0,1,0)) AS H,sum(if(ball=1,1,0)) AS G from play_in GROUP BY p_id) AS d ON p.id=d.p_id
      

  3.   

    呵呵,MYSQL没有IIF,用IF、CASE WHEN代替