共3张表表A{a1,a2,a3,a4,a5}
表B {b1,b2,b3,b4,b5}
表C {c1,c2,c3,c4 ,c5}连接条件
1: A.a1 = B.b1(+) and A.a2 = B.b2(+) and A.a3 = B.b3(+)
2: A.a4 = C.c1(+) and A.a5 = C.c2(+)
3: 麻烦的是这个条件,C中的数据是按c1,c2分组的,条件要求c中的数据所在组中的c3字段值最大的那条数据里对应的c4大于指定的值(假设100)效果如下:
SELECT
B.b4, C.c5
FROM
A,
B,
C,
(SELECT C.c1,C.c2,C.c4
FROM C,
(SELECT c1, c2, max(c3) c3
FROM C
GROUP BY c1, c2) T2
WHERE
C.c1 = T2.c1 AND C.c2 = T2.c2 AND C.c3 = T2.c3) T1
WHERE
A.a1 = B.b1(+) AND
A.a2 = B.b2(+) AND
A.a3 = B.b3(+) AND
A.a4 = C.c1(+) AND
A.a5 = C.c2(+) AND
C.c1 = T1.c1 AND
C.c2 = T1.c2 AND
T1.c4 > 100问题是这么写效率太低了,苦思一下午没想出什么办法,求高手指点
表B {b1,b2,b3,b4,b5}
表C {c1,c2,c3,c4 ,c5}连接条件
1: A.a1 = B.b1(+) and A.a2 = B.b2(+) and A.a3 = B.b3(+)
2: A.a4 = C.c1(+) and A.a5 = C.c2(+)
3: 麻烦的是这个条件,C中的数据是按c1,c2分组的,条件要求c中的数据所在组中的c3字段值最大的那条数据里对应的c4大于指定的值(假设100)效果如下:
SELECT
B.b4, C.c5
FROM
A,
B,
C,
(SELECT C.c1,C.c2,C.c4
FROM C,
(SELECT c1, c2, max(c3) c3
FROM C
GROUP BY c1, c2) T2
WHERE
C.c1 = T2.c1 AND C.c2 = T2.c2 AND C.c3 = T2.c3) T1
WHERE
A.a1 = B.b1(+) AND
A.a2 = B.b2(+) AND
A.a3 = B.b3(+) AND
A.a4 = C.c1(+) AND
A.a5 = C.c2(+) AND
C.c1 = T1.c1 AND
C.c2 = T1.c2 AND
T1.c4 > 100问题是这么写效率太低了,苦思一下午没想出什么办法,求高手指点
B.b4, C.c5
FROM
A,
B,
C,
(SELECT C.c1,C.c2,C.c4
FROM C,
(SELECT c1, c2, max(c3) c3
FROM C GROUP BY c1, c2) T2
WHERE
C.c1 = T2.c1 AND C.c2 = T2.c2 AND C.c3 = T2.c3) T1
WHERE
A.a1 = B.b1(+) AND
A.a2 = B.b2(+) AND
A.a3 = B.b3(+) AND
A.a4 = C.c1(+) AND
A.a5 = C.c2(+) AND
C.c1 = T1.c1 AND
C.c2 = T1.c2 AND
T1.c4 > 100
B.b4, C.c5
FROM
A,
B,
C,
(SELECT c1, c2, max(c3) c3
FROM C
where c4>100
GROUP BY c1, c2) T1
WHERE
A.a1 = B.b1(+) AND
A.a2 = B.b2(+) AND
A.a3 = B.b3(+) AND
A.a4 = C.c1(+) AND
A.a5 = C.c2(+) AND
C.c1 = T1.c1 AND
C.c2 = T1.c2 AND
B.b4, C.c5
FROM
A,
B,
C,
(SELECT c1, c2, max(c3) c3
FROM C
where c4>100
GROUP BY c1, c2) T1
WHERE
A.a1 = B.b1(+) AND
A.a2 = B.b2(+) AND
A.a3 = B.b3(+) AND
A.a4 = C.c1(+) AND
A.a5 = C.c2(+) AND
C.c1 = T1.c1 AND
C.c2 = T1.c2注意建索引
你给我的代码结果上有点不一致,3层select还是不能避免
虽然实际上c4的条件没有缩小数据规模,但是效果却如此惊人,真实很奇怪
不管怎么说现在已经完全可以接受了,非常感谢