Запрос выдает дубли...
Никак не могу понять...
SELECT COUNT(*) FROM `d_fias_addrobj` WHERE `postalcode` = '152062' AND `aolevel` = 7 AND `actstatus` = 1
Дает 33
SELECT count(*) FROM `d_fias_addrobj` as `t1`
left join `d_fias_addrobj` as `t2` ON (`t1`.`parentguid` = `t2`.`aoguid`)
WHERE `t1`.`postalcode` = '152062' AND `t1`.`aolevel` = 7 AND `t1`.`actstatus` = 1
Дает 41
SELECT count(*) FROM `d_fias_addrobj` as `t1`
right join `d_fias_addrobj` as `t2` ON (`t1`.`parentguid` = `t2`.`aoguid`)
WHERE `t1`.`postalcode` = '152062' AND `t1`.`aolevel` = 7 AND `t1`.`actstatus` = 1
Тоже выдает 41
Вопрос закрыт. Т. к. на другие запросы ответ приходит верный.... буду ковырять БД....
А если слева ПУСТО и СПРАВА пусто, то по идее что лефт джоин, что райт должны его включить, вот и выходит 41. А 1 запрос пустые не пропустит. Добавьте исключение пустых, допустим по ключевому полю
right join может давать дубли
left тоже дает....
SELECT COUNT(*) FROM `d_fias_addrobj` WHERE `postalcode` = '152062' AND `aolevel` = 7 AND `actstatus` = 1
Дает 33
SELECT count(*) FROM `d_fias_addrobj` as `t1`
left join `d_fias_addrobj` as `t2` ON (`t1`.`parentguid` = `t2`.`aoguid`)
WHERE `t1`.`postalcode` = '152062' AND `t1`.`aolevel` = 7 AND `t1`.`actstatus` = 1
Дает 41
SELECT count(*) FROM `d_fias_addrobj` as `t1`
right join `d_fias_addrobj` as `t2` ON (`t1`.`parentguid` = `t2`.`aoguid`)
WHERE `t1`.`postalcode` = '152062' AND `t1`.`aolevel` = 7 AND `t1`.`actstatus` = 1
Тоже выдает 41
Либо исходные данные содержат дубли, либо недостаточное условие джойна (картезианское умножение).