Выберите счетчик из вложенной таблицы в Oracle - PullRequest
0 голосов
/ 15 мая 2019

У меня есть две таблицы, как показано ниже, с тремя ключами, а подтаблица имеет несколько записей на ключе №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 Ответ

2 голосов
/ 15 мая 2019

Просто используйте левое соединение:

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

Демо

Значит вызов COUNT(b.no1), который считает столбец в TableB. Мы считаем столбец TableB, потому что в случае, если данная группа в TableA не не соответствует даже одной записи в TableB, COUNT вернет ноль, потому что NULL значения игнорируются.

...