A表 有字段 a1,time(时间类型),cid;
B表 有字段 b1,time(时间类型),cid;
C表(地区表)有字段 cid, cname;A,B表的CID 关联C表的cid,无其他关联关系要求实现 在同一时间 同一地区查询出A,B表的数据(A,B表的数据要全部显示) 时间和地区也要显示;
(可能A表中有,B表中没有,B表中有A表中没有);请问这中怎么写啊,我用了三表内联,数据不对,用外连接 数据又少了;
小弟分不多 先给50

解决方案 »

  1.   

    A和B做全连接,再左连接C,全用cid关联...select a.a1,b.a1,a.time,b.time,c.cname
    from a 
    outer join b on a.cid=b.cid
    left  join c on a.cid = c.cid or b.cid = c.cid可能会有一些数据冗余需要处理,不过数据不会少.
      

  2.   

    --试一下:select a.a1, a.time, cname
      from tableA a, tableC c
     where a.cid = c.cid
    union all (select b.a1, b.time, cname
                 from tableB b, tableC c
                where b.cid = c.cid);
      

  3.   

    SQL> select * from tableA;A1       TIME               CID
    -------- ----------- ----------
    a        2008-11-6 1          1
    b        2008-11-6 1          2SQL> select * from tableB;A1       TIME               CID
    -------- ----------- ----------
    c        2008-11-6 1          3
    d        2008-11-6 1          4SQL> select * from tableC;CNAME           CID
    -------- ----------
    上海              1
    合肥              2
    中国              3
    哈尔滨            4SQL> 
    SQL> select a.a1, a.time, cname
      2    from tableA a, tableC c
      3   where a.cid = c.cid
      4  union all (select b.a1, b.time, cname
      5               from tableB b, tableC c
      6              where b.cid = c.cid);A1       TIME        CNAME
    -------- ----------- --------
    a        2008-11-6 1 上海
    b        2008-11-6 1 合肥
    c        2008-11-6 1 中国
    d        2008-11-6 1 哈尔滨SQL> 
      

  4.   

    select * from a1,a2,a3 where a.cid = b.cid or a.cid = c.cid or b.cid = c.cid;
      

  5.   

    谢谢大家啊,其实就是一个地区表c,里面就两个字段cid ,cname
    一个A表,里面就三个字段,a1,time(时间类型),cid
    一个B表,基本和A表一样,b1,time,cid;
    --查询能显示如下的结果TIME      AREA                         A1         A2
    ----------- -------------------- ---------- ----------
    2008-11-1 8 华北                          1          1    (a1,a2 在同一个时间都有数据,都要显示)
    2008-11-2 8 山西                         28         28
    2008-11-1 1 华北                          9         (在这个时间只有a1有数据,显示a1数据 a2显示空)
    2008-11-1 1 华北   
      

  6.   


    --稍改了一下:SQL> select * from tablea;A1       TIME               CID
    -------- ----------- ----------
    a        2008-11-6 1          1
    b        2008-11-6 1          2
    1        2008-11-3 1          3
             2008-11-3 1          4SQL> select * from tableb;A1       TIME               CID
    -------- ----------- ----------
    c        2008-11-6 1          3
    d        2008-11-6 1          4
    2        2008-10-27           2SQL> select * from tablec;CNAME           CID
    -------- ----------
    上海              1
    合肥              2
    中国              3
    哈尔滨            4SQL> 
    SQL> select a.time,cname,a.a1,b.a1
      2        from tableA a, tableC c,tableB b
      3       where a.cid = c.cid and a.cid=b.cid;TIME        CNAME    A1       A1
    ----------- -------- -------- --------
    2008-11-6 1 合肥     b        2
    2008-11-3 1 中国     1        c
    2008-11-3 1 哈尔滨            dSQL
      

  7.   


    SQL> select a.time,cname,a.a1,b.a1 a2
      2        from tableA a, tableC c,tableB b
      3       where a.cid = c.cid and a.cid=b.cid;TIME        CNAME    A1       A2
    ----------- -------- -------- --------
    2008-11-6 1 合肥     b        2
    2008-11-3 1 中国     1        c
    2008-11-3 1 哈尔滨            dSQL> 
      

  8.   

    FULL JOIN ... ON ...
      

  9.   

    谢谢大家
     blueskywide 你的那个结果集 比较接近了
    只是tablea 有4条数据 结果集里面少了1条
      

  10.   

    我再说的明白点(基本数据):------------------------------------------其实就是一个地区表c,里面就两个字段cid ,cname
    一个A表,里面就三个字段,a1,time(时间类型),cid
    一个B表,基本和A表一样,b1,time,cid;(表间关系):-------------------------------------------
    A 和 B 没有关系,但他们和C表通过CID 进行关联;(页面效果):-------------------------------------------
    实际为了要达到页面上的效果如图:        |  湖北  |  湖南 |  北京  |  上海  |  南京 |
    -------------------------------------------------------
    时间    | a1| b1| a1|b1 |a1 |b1 |a1 | b1| a1|b1 |
    -------------------------------------------------------
    08-11-1| 10| 5 |9  |8  |   | 9 |   |   |   |   |
    ----------------------------------------------------- 
    08-11-2|   |20 |   |6  |   | 9 |   |   |   |   |
    ----------------------------------------------------- (画的比较难看)
    (要求):---------------------------------就是如果同一时间 a1 和b1 都有值的话 就都显示 若只有一个表中有值就显示,另一个为空 (但所有的数据都要显示出来)
    所以我想通过一条查询 来接近页面上要显示的效果,通过hibernate映射视图,
    将对象传输到页面 进行显示
    那么对应的位置 我只要用这个对象来获得相应的属性就可以了,不然这三张表要弄成页面的数据效果 还真不知道怎么弄了
    请大家帮帮忙
      

  11.   

    呵呵,你可以以C表為主表
    再邊A,B表 
    最後加判斷條件,如A(B)表中有一個數據不能為空或 0