有 主表一张 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 是两条记录,(附表中有重复记录只会显示一条?因为是左联)问题是附表有重复记录只读出一条记录是可以的
但是如何控制读出日期最大的那一条?
字段有
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 是两条记录,(附表中有重复记录只会显示一条?因为是左联)问题是附表有重复记录只读出一条记录是可以的
但是如何控制读出日期最大的那一条?
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
数据有很多,呵呵主要是附表里,有重复的记录Main_id,这列有重复
但是日期不是一样现在是要找出Main_id唯一列,日期最大的,整个表的字段
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)
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;
不知道是否可以满足楼主的需求!