我回答你了,答案如下:
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(+)假如还有什么问题,可以和我联系。和和。

解决方案 »

  1.   

    我的测试环境的数据库是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 320CREATE 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
      

  2.   

    不好意思,
    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
      

  3.   

    请 Croatia(Croatia) 到下面领分!
    http://community.csdn.net/Expert/topic/3446/3446949.xml?temp=.2001917