表A
id    title
1     姓名
2     单位
3     年龄
--------------------------
表B
id   pid   content
1    1     张三
2    2     计生委
3    1     李四
4    2     发改委
5    3     46
6    1     赵五
7    2     财政部
--------------------------
想连接两表实现输出如下:
id    title    pid   content
1     姓名       1     张三
2     单位       2     计生委
3     年龄       null  null
1     姓名       1     张三
2     单位       2     计生委
3     年龄       3     46
1     姓名       1     张三
2     单位       2     计生委
3     年龄       null  null===========================
请问sql语句如何实现,想了很久
目前我试过单纯用左连接无法输出一个两个B表null行SQL

解决方案 »

  1.   

    如果表B仅这三个字段,没有字段可以标明哪些记录是一组,则通过SQL语句实现效率很差,这样建议用程序或存储过程来实现。
      

  2.   

    楼上的两位大哥,怎么设计能让SQL好写一点?
      

  3.   


    表Aid 姓名 单位 年龄
      

  4.   

    SET @BB=0;
    SET @BB1=0;
    SET @A=1;
    SET @A1=1;
    SELECT D.ID,D.title,E.pid,E.content FROM (
    SELECT * FROM AA1,(
    SELECT DISTINCT BZ FROM (
    SELECT *,@A:=IF(@BB+1=PID,@A,@A+1) AS BZ,@BB:=PID FROM BB) A) C) D
    LEFT JOIN
    (SELECT *,@A1:=IF(@BB1+1=PID,@A1,@A1+1) AS BZ,@BB1:=PID FROM BB) E
    ON D.BZ=E.BZ AND D.ID=E.PID
      

  5.   

    谢谢版主,我把各个子查询分拆看了一下,基本了解了原理,
    有一点不太明白,就是变量BB和BB1在查询中起到什么作用,如果去掉结果就不对了。
      

  6.   

     根据PID,将1、2、3这样的记录设为1组,假设你的记录有序, 
    如 1、2、1、2、3、1、2这样的,否则自行增加字段以确定哪些
    记录为1组
      

  7.   

    好复杂,不过大致看懂了,呵呵,非常感谢版主!
    想再问下,像这种A表行不确定,然后B表又关联A表的情况,如何设计表的两表结构可以让查询语句简洁高效一些?
      

  8.   

    其实我的系统中设计是这样的:
    表A
    id    title
    1     姓名
    2     单位
    3     年龄
    --------------------------
    表B
    id   pid   content   mid
    1    1     张三       1
    2    2     计生委     1
    3    1     李四       2
    4    2     发改委     2
    5    3     46        2
    6    1     赵五       3
    7    2     财政部     3这样的结构可以了,还是有更好的方法?