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
B表 有字段 b1,time(时间类型),cid;
C表(地区表)有字段 cid, cname;A,B表的CID 关联C表的cid,无其他关联关系要求实现 在同一时间 同一地区查询出A,B表的数据(A,B表的数据要全部显示) 时间和地区也要显示;
(可能A表中有,B表中没有,B表中有A表中没有);请问这中怎么写啊,我用了三表内联,数据不对,用外连接 数据又少了;
小弟分不多 先给50
from a
outer join b on a.cid=b.cid
left join c on a.cid = c.cid or b.cid = c.cid可能会有一些数据冗余需要处理,不过数据不会少.
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);
-------- ----------- ----------
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>
一个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 华北
--稍改了一下: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
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>
blueskywide 你的那个结果集 比较接近了
只是tablea 有4条数据 结果集里面少了1条
一个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映射视图,
将对象传输到页面 进行显示
那么对应的位置 我只要用这个对象来获得相应的属性就可以了,不然这三张表要弄成页面的数据效果 还真不知道怎么弄了
请大家帮帮忙
再邊A,B表
最後加判斷條件,如A(B)表中有一個數據不能為空或 0