我有两个带三个键的表,子表在键号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'
答案 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;
对COUNT(b.no1)
(在TableB
中计数的列)的调用意义重大。我们对TableB
列进行计数是因为,在TableA
中给定的组与TableB
中的单个记录不匹配的情况下,{{1} }将返回零,因为COUNT
的值将被忽略。