Объединение полей нескольких таблиц возвращает слишком много строк, если используется более 1 поля - PullRequest
0 голосов
/ 02 июня 2018

У меня следующий запрос:

 SELECT DISTINCT x.TaskID S_ID
              , y.TaskID T_ID
              , z.TaskID P_ID
              , z.Duration
           FROM SumSubTaskPDay x
           LEFT 
           JOIN SumTaskPDay y 
             ON y.TaskID = x.T_ID
           LEFT 
           JOIN SumParentTaskPDay z
             ON z.TaskID = SumTaskPDay.y

Проблема, с которой я столкнулся, заключается в том, что запрос возвращает слишком много строк, как только я добавляю другое поле, кроме идентификаторов.

Итакв этом примере поле SumParentTaskPDay. Duration приводит к тому, что число строк увеличивается примерно в четыре раза

Возможно, проблема в таблицах, которые на самом деле являются представлениями из трех псевдонимов из одной таблицы tasks:tasks как subtasks связано с tasks как tasks с tasks. id = subtasks. parent_id

  CREATE  VIEW SumTaskPDay AS
SELECT DATE_FORMAT(n.START, '%d %M %Y') dDay
     , t.idTask TaskID
     , t.TaskName 
     , t.ParentTaskId PT_ID
     , COUNT(s.idTask) SubTaskCount
     , SUM(UNIX_TIMESTAMP(n.STOP) - UNIX_TIMESTAMP(n.START)) DurationUnix
     , DATE_FORMAT(SEC_TO_TIME(SUM(UNIX_TIMESTAMP(n.STOP) - UNIX_TIMESTAMP(n.START))), '%H:%i:%s') Duration
  FROM Slips n
  LEFT 
  JOIN Tasks s 
    ON s.idTask = n.idTask
  LEFT 
  JOIN Tasks t 
    ON t.idTask = s.ParentTaskId
 GROUP 
    BY dDay 
     , t.idTask 
     , t.TaskName 
     , t.ParentTaskId

Я использую этот подход для суммированияполя продолжительности для разных уровней, так что я могу получить простое представление для построения отчета, где мне нужно только позаботиться о группировке, без формул и прочее, чтобы я мог легко переключаться на разные инструменты построения отчетов, не разбираясь в часахсуммировать и форматировать метки времени

...