一个投票可以有多个选项,现在想返回一对一的 投票的id 和 选项数量 和 投票人id,
投票表  voteid
         1
         2选项表 sId  voteid  item 
        1      1     A
        2      1     B
        3      1     C
        4      2     A
        5      2     B用户选项表 usid   userid   sid
            1       1        2
            2       1        3
            3       1        4
            4       1        5
返回 投票的id  选项数量  投票人id
        1          3         1
        2          2         1

解决方案 »

  1.   

    create table 投票表(voteid int)
    insert into 投票表 values(1)
    insert into 投票表 values(2)
    create table 选项表(sId int,voteid int,item  varchar(10))
    insert into 选项表 values(1 ,1, 'A')
    insert into 选项表 values(2 ,1, 'B')
    insert into 选项表 values(3 ,1, 'C')
    insert into 选项表 values(4 ,2, 'A')
    insert into 选项表 values(5 ,2, 'B')
    create table 用户选项表(usid int,userid int,sid int)
    insert into 用户选项表 values(1, 1 ,2)
    insert into 用户选项表 values(2, 1 ,3)
    insert into 用户选项表 values(3, 1 ,4)
    insert into 用户选项表 values(4, 1 ,5)
    goselect t1.* , t2.投票人id from
    (
    select m.voteid 投票的id, 
           count(1) 选项数量
    from 投票表 m , 选项表 n 
    where m.voteid = n.voteid group by m.voteid
    ) t1,
    (
    select m.voteid 投票的id, 
           min(n.userid) 投票人id
    from 选项表 m,用户选项表 n
    where m.sid = n.sid group by m.voteid
    ) t2
    where t1.投票的id = t2.投票的iddrop table 投票表 ,选项表,用户选项表/*
    投票的id       选项数量        投票人id       
    ----------- ----------- ----------- 
    1           3           1
    2           2           1(所影响的行数为 2 行)
    */