17,377
社区成员
发帖
与我相关
我的任务
分享
select
A.aaID,
A.aaName,
A.aaIP,
D.ddName,
E.eeName,
count(distinct(f.ooID))
from
A
join B on A.bbID=B.bbID
join C on B.ccID=C.ccID
left join D on A.ddID=D.ddID
left join E on A.eeID=E.eeID
left join F on
(F.xxID=A.aaID and F.yyID=1)
or
(exists(select 1 from G where G.aaID=A.aaID and G.ggID=F.xxID) and F.yyID=2)
or
(exists(select 1 from H,G where H.ggID=G.ggID and G.aaID=A.aaID and H.hhID=F.xxID ) and F.yyID=3)
where
C.ccID= ?
group by
A.aaID,
A.aaName,
A.aaIP,
D.ddName,
E.eeName
SELECT aaid, aaname, aaip, ddname, eename, COUNT (ooid)
FROM (SELECT DISTINCT a.aaid, a.aaname, a.aaip, d.ddname, e.eename, f.ooid
FROM a, b, c, d, e, f
WHERE a.bbid = b.bbid
AND b.ccid = c.ccid
AND a.ddid = d.ddid(+)
AND a.eeid = e.eeid(+)
AND a.aaid = f.xxid
AND f.yyid = 1
AND c.ccid = :1
UNION
SELECT DISTINCT a.aaid, a.aaname, a.aaip, d.ddname, e.eename, f.ooid
FROM a, b, c, d, e, f, g
WHERE a.bbid = b.bbid
AND b.ccid = c.ccid
AND a.ddid = d.ddid(+)
AND a.eeid = e.eeid(+)
AND f.yyid = 2
AND g.aaid = a.aaid
AND g.ggid = f.xxid
AND c.ccid = :1
UNION
SELECT DISTINCT a.aaid, a.aaname, a.aaip, d.ddname, e.eename, f.ooid
FROM a, b, c, d, e, f, g, h
WHERE a.bbid = b.bbid
AND b.ccid = c.ccid
AND a.ddid = d.ddid(+)
AND a.eeid = e.eeid(+)
AND f.yyid = 3
AND h.ggid = g.ggid
AND g.aaid = a.aaid
AND h.hhid = f.xxid
AND c.ccid = :1)
GROUP BY aaid, aaname, aaip, ddname, eename;
SELECT a.aaid, a.aaname, a.aaip, d.ddname, e.eename
, COUNT (DISTINCT (f.ooid))
FROM a, b, c, d, e, f
WHERE a.bbid = b.bbid
AND b.ccid = c.ccid
AND a.ddid = d.ddid(+)
AND a.eeid = e.eeid(+)
AND ( f.yyid(+) = 1 AND (a.aaid = f.xxid(+) ) -- 既然count ooid, 这里为什么要用左联接?
OR (f.yyid = 2 AND EXISTS (SELECT 1
FROM g
WHERE g.aaid = a.aaid AND g.ggid = f.xxid))
OR ( f.yyid = 3
AND EXISTS (
SELECT 1
FROM h, g
WHERE h.ggid = g.ggid
AND g.aaid = a.aaid
AND h.hhid = f.xxid)))
AND c.ccid = :1
GROUP BY a.aaid, a.aaname, a.aaip, d.ddname, e.eename;