场景:
有一个学习记录表 A 记录了 学习的用户编号 和 学习的内容编号
table a ( userid , lecid )有一个表 B 记录了 用户的分类情况,包含用户编号和 分类编号
table b (userid , qid)有一个表 c 记录了 用户和 其他用户的关联关系表, 包括 用户编号 和 被关联的用户编号
table c (userid , ruid )现在希望 通过 表 b 中 分类编号  qid , 检索出 表 b 中 所有的 userid  以及 和 表 b 中检索出的  userid 关联的  表 c 中 ruid  在 表 a 中的 学习记录谢谢

解决方案 »

  1.   

    select b.userid,a.lceid from table a,table b,table c where b.qid = 查询的 qid and b.userid = c.userid and c.userid = a.userid
      

  2.   

    SELECT
    b.oid, a.*
    FROM b -- 现在希望 通过 表 b 中 分类编号  qid , 检索出 表 b 中 所有的 userid 
    INNER JOIN c ON b.userid=c.userid --- 以及 和 表 b 中检索出的  userid 关联的  表 c 
    INNER JOIN a ON c.ruid = a.userid -- 中 ruid  在 表 a 中的 学习记录
      

  3.   


    表b 中的分类条件 qid 条件赋值:
    SELECT
    b.oid, a.*
    FROM b -- 现在希望 通过 表 b 中 分类编号  qid , 检索出 表 b 中 所有的 userid 
    INNER JOIN c ON b.userid=c.userid --- 以及 和 表 b 中检索出的  userid 关联的  表 c 
    INNER JOIN a ON c.ruid = a.userid -- 中 ruid  在 表 a 中的 学习记录
    where b.qid = ?
    这个结果不是我希望得到的我希望的最终数据是 所有表 b 中的人, 以及表 b 中人 相 关联的表 c 中的人的 所有在 表 a 中的学习记录
      

  4.   

    抱歉,头两天外出了,有一个学习记录表 A 记录了 学习的用户编号 和 学习的内容编号
    table a ( userid , lecid )
    1,1
    1,2
    1,3
    2,1
    3,2
    3,4
    4,1
    4,3
    5,1
    5,2有一个表 B 记录了 用户的分类情况,包含用户编号和 分类编号
    table b (userid , qid)
    1,2
    2,2
    3,1
    4,3
    有一个表 c 记录了 用户和 其他用户的关联关系表, 包括 用户编号 和 被关联的用户编号
    table c (userid , ruid )
    1,2
    1,5
    2,3
    3,1如果输入表 b 的qid = 2, 希望得到的表 a 输出是
    1,1
    1,2
    1,3
    2,1
    5,1 //因为 1 关联着 5
    5,2如果输入 qid = 3
    3,2
    3,4
    1,1 //因为 3 关联着 1
    1,2
    1,3
      

  5.   


    第一个inner join 没有问题,是限制分类中的人第二个 应该是加入 分类中的人 关联的所有人的学习情况, 用inner 的话,不仅没有关联更多的人
      

  6.   

    如果输入表 b 的qid = 2, 希望得到的表 a 输出是
    1,1
    1,2
    1,3
    2,1
    5,1 //因为 1 关联着 5
    5,2
    -----------------------------------------
    1  关联着 5 是通过 
    1,2
    1,5
    的关系?
    如果是的话,那么 表 b 的qid = 2, 对应的有两个 userid
    table b (userid , qid)
    1,2
    2,2
    ---> 为什么你找了 1 的关联,没有去找 2 的关联?
      

  7.   


    抱歉,确实弄错了, 如果 qid = 2 的话,结果
    1,1
    1,2
    1,3
    2,1
    5,1 //因为 1 关联着 5
    5,2
    3,2 //因为 2 关联编号 3
    3,4就是需要这种结果,谢谢
      

  8.   


    SELECT a.*
    FROM a, (
    SELECT b.userid FROM b WHERE b.qid = 2
    UNION
    SELECT c.ruid FROM b, c WHERE b.qid = 2 AND b.userid = c.userid
    )x WHERE x.userid = a.userid
      

  9.   


    测试了这个应该没有问题了, 但关联到实际项目的时候,还有些问题,
    有一个表 c 记录了 用户和 其他用户的关联关系表, 包括 用户编号 和 被关联的用户编号 , 这个关系还有一个关系名称,而这里面保存了名称序号
    table c (userid , ruid  , rxh)
    1,2 , 1
    1,5 , 2
    2,3 , 2
    3,1 , 3表 d 是对应的序号表
    rxh  rname
    1  经理
    2  老板
    3  组长最后通过分类 qid = 1 能够得到上面那些数据外, 还希望得到被检索的对应人 名称
    谢谢
      

  10.   


    SELECT a.*
    FROM a, x.rname (
        SELECT b.userid, '' as rname FROM b WHERE b.qid = 2
        UNION
        SELECT c.ruid , e.rname  FROM b, c ,d  WHERE b.qid = 2 AND b.userid = c.userid and d.rxh = c.rxh
    )x WHERE x.userid = a.userid可这样得到的 rname 全部为空 ‘’
      

  11.   

    SELECT a.* IFNULL(d.name, '本人') as name
    FROM(
    SELECT a.*
    FROM a, (
    SELECT b.userid FROM b WHERE b.qid = 2
    UNION
    SELECT c.ruid FROM b, c WHERE b.qid = 2 AND b.userid = c.userid
    )x WHERE x.userid = a.userid
    ) LEFT JOIN d ON d.rxh  = a.userid
      

  12.   


    Error Code: 1248. Every derived table must have its own alias 0.000 sec
    以上语句执行错误
      

  13.   

    别名写掉了
    SELECT a.* IFNULL(d.name, '本人') as name
    FROM(
        SELECT a.*
        FROM a, (
            SELECT b.userid FROM b WHERE b.qid = 2
            UNION
            SELECT c.ruid FROM b, c WHERE b.qid = 2 AND b.userid = c.userid
        )x WHERE x.userid = a.userid
    ) a LEFT JOIN d ON d.rxh  = a.userid