【精】▼▼▼百分大讨论,高手进来讨论解决,菜鸟进来学习!与jsp和ORACLE有关▼▼▼【精】

dcren521 2004-09-30 11:47:22
地址如下,不解决来看看也许对你也有帮助!
http://community.csdn.net/Expert/topic/3421/3421048.xml?temp=.1392176
...全文
180 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dcren521 2004-10-14
请 Croatia(Croatia) 到下面领分!
http://community.csdn.net/Expert/topic/3446/3446949.xml?temp=.2001917
  • 打赏
  • 举报
回复
Croatia 2004-09-30
不用客气,具体的,在你的另外的那个贴子上面最后写的是正确的。

你自己参考吧。
  • 打赏
  • 举报
回复
dcren521 2004-09-30
谢谢,好人哪!
  • 打赏
  • 举报
回复
Croatia 2004-09-30
不好意思,
UNION的前面的句子修改了一下,和和,

SELECT 0 AS SNO,0 AS SPRICE,'' AS SNAME,T12.SNAME2
FROM (SELECT * FROM T3 Order by t3.sno2) T12
UNION
SELECT T11.SNO,T2.SPRICE,T11.SNAME,T11.SNAME2
FROM (SELECT * FROM T1 ,T3 Order by T1.SNo,t3.sno2) T11,
T2
WHERE T11.SNO = T2.SNO(+) AND T11.SNO2 = T2.SNO2(+)

不需要T1
  • 打赏
  • 举报
回复
Croatia 2004-09-30
我的测试环境的数据库是ORACLE 9.2.0

测试的表,
CREATE TABLE USRSZZZ_2.T1
(
SNO NUMBER(2,0) NOT NULL,
SNAME VARCHAR2(20) NOT NULL
)
/
SNO SNAME
1 Name1
2 Name2
3 Name3


CREATE TABLE USRSZZZ_2.T2
(
SNO NUMBER(2,0) NOT NULL,
SNO2 NUMBER(2,0) NOT NULL,
SPRICE NUMBER
)
/
SNO SNO2 SPRICE
1 1 100
1 2 110
2 1 210
2 3 230
3 2 320

CREATE TABLE USRSZZZ_2.T3
(
SNO2 NUMBER(2,0) NOT NULL,
SNAME2 VARCHAR2(20)
)
/

SNO2 SNAME2
1 Dong
2 Nan
3 Xi
4 Bei


SQL:
SELECT 0 AS SNO,0 AS SPRICE,'' AS SNAME,T11.SNAME2
FROM (SELECT * FROM T1 ,T3 Order by T1.SNo,t3.sno2) T11
UNION
SELECT T11.SNO,T2.SPRICE,T11.SNAME,T11.SNAME2
FROM (SELECT * FROM T1 ,T3 Order by T1.SNo,t3.sno2) T11,
T2
WHERE T11.SNO = T2.SNO(+) AND T11.SNO2 = T2.SNO2(+)

结果:
SNO SPRICE SNAME SNAME2
0 0 (NULL) Bei
0 0 (NULL) Dong
0 0 (NULL) Nan
0 0 (NULL) Xi
1 100 Name1 Dong
1 110 Name1 Nan
1 (NULL) Name1 Bei
1 (NULL) Name1 Xi
2 210 Name2 Dong
2 230 Name2 Xi
2 (NULL) Name2 Bei
2 (NULL) Name2 Nan
3 320 Name3 Nan
3 (NULL) Name3 Bei
3 (NULL) Name3 Dong
3 (NULL) Name3 Xi
  • 打赏
  • 举报
回复
Croatia 2004-09-30
我回答你了,答案如下:


SELECT T11.ID,T2.price,T11.name,T11.providerName
FROM (SELECT * FROM goods ,provider Order by goods.id,provider.providerId ) T11,
price T2
where T11.id = T2.id(+) AND T11.providerId = T2.provider(+)

因为你要先是所有的数据,所以,我就让你的商品和提供商这两个做了FULL JOIN,这样,你要显示的所有的东西,都调出来了,然后,左联结你的价格这个表,这样,有的话,就会,没有的话,就是NULL,你可以控制显示的。

这样,就和你得显示方法有关系了,你可以用一个变量,来记录你的物品序号,不同的时候,就是换行。否则,就是rs.next();

还有一个问题,就是,你的供货商名称名字的取得,其实,这个就见仁见智了。
1。可以再取一次。只是取供货商表
2。读取晚所有的第一条数据以后,也可以知道。
3。在你的物品表里面添加id是0的数据,它的目的就是取得供货商名称

上面的方法3,假如你不想添加,可以用下面的SQL句子。
select 0,0,T11.name,T11.providerName
FROM (SELECT * FROM goods ,provider Order by goods.id,provider.providerId ) T11
UNION
SELECT T11.ID,T2.price,T11.name,T11.providerName
FROM (SELECT * FROM goods ,provider Order by goods.id,provider.providerId ) T11,
price T2
where T11.id = T2.id(+) AND T11.providerId = T2.provider(+)

假如还有什么问题,可以和我联系。和和。
  • 打赏
  • 举报
回复
发帖
Web 开发

8.0w+

社区成员

Java Web 开发
社区管理员
  • Web 开发社区
加入社区
帖子事件
创建了帖子
2004-09-30 11:47
社区公告
暂无公告