计算其他2个表中父表中存在多少行

时间:2014-01-24 16:06:27

标签: sql oracle11g left-join

我有一个父表,如果在另外两个表中找到它们,则必须存在所有PROTOCOL和LOT。 我需要找出其他两个表中有多少这些PROTOCOL和LOT:tbl2,tbl3:

           parent       tbl2       tbl2
|--------|----------|------------|----------|
|PROTOCOL| 150      |  132       |  71      |
|--------|----------|------------|----------|
| LOT    | 845      |  724       |  621     |
|--------|----------|------------|----------|

到目前为止,我得到的是:

SELECT DISTINCT PROTOCOL
FROM parent L
LEFT JOIN
(
    SELECT DISTINCT PROTOCOL
    FROM tbl2
) E
ON L.PROTOCOL = E.PROTOCOL
LEFT JOIN 
(
    SELECT DISTINCT PROTOCOL
    FROM tbl3
) N
ON L.PROTOCOL = N.PROTOCOL

在我加入PROTOCOL之前,我想让LOT工作,但我似乎也无法做到这一点。

这可能吗?

2 个答案:

答案 0 :(得分:1)

根据你的解释,我认为以下应该这样做:

     SELECT COUNT(distinct l.protocol) as parent
           ,COUNT(distinct e.protocol) as tbl2
           ,COUNT(distinct n.protocol) as tbl3
    FROM parent L
    LEFT JOIN tbl2 E on L.protocol=E.protocol
    LEFT JOIN tbl3 N on L.protocol=N.protocol
    UNION ALL 
    --same for the LOP count  

答案 1 :(得分:1)

试试这个:

SELECT COUNT(distinct p.protocol)
FROM PARENT p INNER JOIN tbl2 t2 ON p.protocol = t2.protocol 
INNER JOIN tbl3 t3 ON p.protocol = t2.protocol

或者这个:

SELECT COUNT(distinct p.protocol)
FROM PARENT p 
WHERE p.protocol IN (SELECT protocol FROM tbl2)
AND p.protocol IN (SELECT protocol FROM tbl3)