有 主表一张  Main
字段有  
ID    name   date
1     张三    2011-1-1
2     李四    2011-1-1
附表两张
1.
fubiaoone
ID  Main_id  qk  date
1     1      qk  2011-1-1
1     1      qk  2011-1-2
2.
fubiaotwo
ID  Main_id   name  date
1     2      qk1  2011-1-1
1     2      qk2  2011-1-2
现在我要通过左联查询 
select * from Main,fubiaoone,fubiaotwo where Main.id=fubiaoone.Main_id(+) and Main.id=fubiaotwo.Main_id(+)出来的结果是1     张三    2011-1-1        1      qk  2011-1-1   
2     李四    2011-1-1                                 1      qk  2011-1-1  是两条记录,(附表中有重复记录只会显示一条?因为是左联)问题是附表有重复记录只读出一条记录是可以的
但是如何控制读出日期最大的那一条?

解决方案 »

  1.   

    如果只考虑你示例里的数据,只要order by日期,再取rownum=1就行了select *
    from(
    select * from Main,fubiaoone,fubiaotwo where Main.id=fubiaoone.Main_id(+) and Main.id=fubiaotwo.Main_id(+)
    order by main.date)
    where rownum=1
    如果有多组数据
    就用row_number() over
      

  2.   


    数据有很多,呵呵主要是附表里,有重复的记录Main_id,这列有重复
    但是日期不是一样现在是要找出Main_id唯一列,日期最大的,整个表的字段
      

  3.   

    很奇怪的表机构,抛砖引玉一下。
    CREATE TABLE Main1(
    ID1 NUMBER,
    NAME1 VARCHAR2(50),
    DATE1 DATE);INSERT INTO main1
    VALUES(1,'zhangsan',to_date('2011-1-1','YYYY-MM-DD'));
    INSERT INTO main1
    VALUES(2,'lisi',to_date('2011-1-1','YYYY-MM-DD'));CREATE TABLE fubiaoone(
    ID1 NUMBER,
    main_id NUMBER,
    qk VARCHAR2(50),
    DATE1 DATE
    );INSERT INTO fubiaoone
    VALUES (1,1,'qk',to_date('2011-1-1','YYYY-MM-DD'));
    INSERT INTO fubiaoone
    VALUES (1,1,'qk',to_date('2011-1-2','YYYY-MM-DD'));
    CREATE TABLE fubiaotwo(
    ID1 NUMBER,
    main_id NUMBER,
    qk VARCHAR2(50),
    DATE1 DATE
    );INSERT INTO fubiaotwo
    VALUES (1,2,'qk',to_date('2011-1-1','YYYY-MM-DD'));
    INSERT INTO fubiaotwo
    VALUES (1,2,'qk',to_date('2011-1-2','YYYY-MM-DD'));
    SELECT * FROM Main1;
    SELECT * FROM fubiaoone;
    SELECT * FROM fubiaotwo;
    ===============================
    SELECT *
      FROM MAIN1 A, FUBIAOONE B
     WHERE A.ID1 = B.MAIN_ID
       AND B.DATE1 = (SELECT MAX(DATE1) FROM FUBIAOONE WHERE MAIN_ID = A.ID1)
    UNION
    SELECT *
      FROM MAIN1 A, FUBIAOTWO C
     WHERE A.ID1 = C.MAIN_ID
       AND C.DATE1 = (SELECT MAX(DATE1) FROM FUBIAOTWO WHERE MAIN_ID = A.ID1)
      

  4.   


    select * from Main A
    left join(
        select B.* from fubiaoone B
        inner join(
            select main_id,qk,max(date) maxdate from fubiaoone
            group by main_id,qk
        ) C on B.main_id = C.main_id and B.qk = C.qk and B.date = c.maxdate
    ) D on A.id = B.main_id;
    不知道是否可以满足楼主的需求!