Как сравнить количество двух разных столбцов для нескольких строк и найти только несоответствия - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть две таблицы:

Table A
--------- 
id | num_of_records
---|---------------
10 | 2
20 | 9
30 | 1
40 | 3

Table B
---------
id | details
---| --------
10 | somedetail 2
10 | somedetail 3
20 | foobar
30 | random
40 | random 2

В приведенном выше примере я хочу получать перекоды только в том случае, если num_of_recods из TableA не соответствуют count(*) из TableB, поэтому на основе результата выше:

id | difference
---| --------
20 | 8
40 | 2

Мой реальный TableB имеет около 20 миллионов записей, а TableA имеет около 4 тысяч записей.

Я написал что-то подобное, что не работает select id from tableA join on tableB where tableA.num_of_records <> (select count(*) from tableB where id = id);

1 Ответ

0 голосов
/ 01 апреля 2020

Вы можете использовать full join:

select id, coalesce(a.num_of_records, 0) - coalesce(b.cnt, 0)
from a full join
     (select id, count(*) as cnt
      from b
      group by id
     ) b
     using (id)
where a.num_of_records is distinct from b.cnt;

. Используется full join для обработки случая, когда в одной из таблиц отсутствует id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...