从Oracle的子表中选择计数

时间:2019-05-15 05:10:23

标签: oracle select count subquery

我有两个带三个键的表,子表在键号31上有多个记录:

TableA: no1,no2,no31
        no1,no2,n032
TableB: no1,no2,n031,file311
        no1,no2,n031,file312
        no1,no2,n031,file313
        no1,no2,n032,file321
        no1,no2,n032,file322

我要选择以下结果以使用相同的三个键对子表上的记录进行计数

result: no1, no2, no31, 3
        no1, no2, no32, 2

我按如下所示尝试了SQL,但出现错误ORA-00904:“ A”。“ ARTICLE_NO”:“%s:无效标识符”,我该怎么办?

SELECT A.no1, A.no2, A.no3, P.PHOTO_COUNT
FROM TableA A,
   (SELECT COUNT(*) AS PHOTO_COUNT
    FROM TableB
    WHERE no1 = 'param1' AND no2 = 'param2' AND no3 = A.no3) P
WHERE A.no1 = 'param1' AND A.no2 = 'param2'

1 个答案:

答案 0 :(得分:2)

只需使用左联接:

SELECT a.no1, a.no2, a.no3, COUNT(b.no1) AS PHOTO_COUNT
FROM TableA a
LEFT JOIN TableB b
    ON a.no1 = b.no1 AND a.no2 = b.no2 AND a.no3 = b.no3
GROUP BY a.no1, a.no2, a.no3;

enter image description here

Demo

COUNT(b.no1)(在TableB中计数的列)的调用意义重大。我们对TableB列进行计数是因为,在TableA中给定的组与TableB中的单个记录不匹配的情况下,{{1} }将返回零,因为COUNT的值将被忽略。