@part_os

Не могу правильно объединить таблицы в запросе, как поправить?

Всем привет, не могу правильно объединить таблицы в запросе.
имеем однотипные таблицы со значениями tddoppu,tddopsredn,tddopprochee
и таблицу с датой tddate
необходимо по iddate и counterid выбрать все значения из этих таблиц, отсутствующие тоже.
SELECT `tddoppu`.`value`       as `tddoppu`,
       `tddopsredn`.`value`    as `tddopsredn`,
       `tddopprochee`.`value`  as `tddopprochee`,
       `tddate`.`iddate`       as `iddate`,
       `tddoppu`.`counterid`   as `counterid`
from `tddate`
         left join `tddoppu`
                   on `tddate`.`iddate` = `tddoppu`.`dateid`
                       and `tddoppu`.`counterid` in (:COUNTER_IDS)
         left join `tddopsredn`
                   on `tddate`.`iddate` = `tddopsredn`.`dateid`
                       and `tddopsredn`.`counterid` in (:COUNTER_IDS)
         left join `tddopprochee`
                   on `tddate`.`iddate` = `tddopprochee`.`dateid`
                       and `tddopprochee`.`counterid` in (:COUNTER_IDS)

where `tddate`.`iddate` = :DATE_ID


в результате получаю задублированные строки.
tddoppu,tddopsredn,tddopprochee,iddate,counterid
170.86, null, 148.14, 27, 9981
28.33, null, 148.14, 27, 9988
170.86, null, 21.67, 27, 9981
28.33, null, 21.67, 27, 9988


понимаю что нужно как то указать в запросе на равенство в таблицах counterid но если я делаю
если я добавляю в WHERE
and tddoppu.counterid = tddopsredn.counterid
and tddoppu.counterid = tddopprochee.counterid
and tddopprochee.counterid = tddopsredn.counterid

строки не выбираются
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
JOIN - это декартово произведение, Если в первой и третьей таблице у вас в выборку попадают по два значения, (170.86, 28.33) и (148.14, 21.67) соответственно, то в результате получите четыре строки (2*2). Для каждого значения из первого набора будет добавлено каждое значение из второго набора.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы