Top.Mail.Ru
Ответы

Запрос выдает дубли...

Никак не могу понять...

Дополнен

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

Дополнен

Вопрос закрыт. Т. к. на другие запросы ответ приходит верный.... буду ковырять БД....

По дате
По рейтингу
Аватар пользователя
Просветленный
11лет

А если слева ПУСТО и СПРАВА пусто, то по идее что лефт джоин, что райт должны его включить, вот и выходит 41. А 1 запрос пустые не пропустит. Добавьте исключение пустых, допустим по ключевому полю

Аватар пользователя
Мудрец
11лет

right join может давать дубли

Аватар пользователя
Ученик
11лет

left тоже дает....

Аватар пользователя
Ученик
11лет

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

Аватар пользователя
Искусственный интеллект
11лет

Либо исходные данные содержат дубли, либо недостаточное условие джойна (картезианское умножение).



Видео по теме