присоединение по подзапросу возвращает неудачу - PullRequest
0 голосов
/ 09 октября 2011

Попытка соединить таблицу "fab_qouta.qoutatype" со значением внутри подзапроса "fab_status_members.statustype", но ничего не возвращается.

Если я соединю две таблицы непосредственно в запросе, результат будет правильным.

Примерно так:

select statustype, takst 
from   
  fab_status_members AS sm
    join fab_quota as fq
      ON fq.quotatype = sm.statustype

Так что я, должно быть, что-то делаю не так, вот код подзапроса, любая помощь приветствуется

select
  ju.id,
  name,
  statustype,
  takst

from jos_users AS ju 
  join 
    ( SELECT sm.Members AS MemberId, MaxDate , st.statustype 
      FROM fab_status_type AS st
        JOIN fab_status_members AS sm 
          ON (st.id = sm.statustype) -- tabels are joined 
        JOIN 
          ( SELECT members, MAX(pr_dato) AS MaxDate -- choose members and Maxdate from
            FROM fab_status_members 
            WHERE pr_dato <= '2011-07-01' 
            GROUP BY members
          )
          AS sq
          ON (sm.members = sq.members AND sm.pr_dato = sq.MaxDate)
     ) as TT
     ON ju.id = TT.Memberid
  join fab_quota as fq 
    ON fq.quotatype = TT.statustype 
GROUP BY id

Думаю, проблема встрока: присоединитесь к fab_quota как fq ON fq.quotatype = TT.statustype

Но я не могу просмотреть его: - (

С уважением

Томас

1 Ответ

0 голосов
/ 09 октября 2011

Похоже, что вы присоединяетесь к наименьшей комбинации каждого члена с соответствующим максимальным значением pr_dato для данной даты.Я бы потянул ЭТО в позицию ПЕРВОГО запроса вместо того, чтобы быть похороненным, а затем снова присоединить его к остальным ...

select STRAIGHT_JOIN
      ju.id,
      ju.name,
      fst.statustype,
      takst
   from 
      ( SELECT 
              members, 
              MAX(pr_dato) AS MaxDate
           FROM 
              fab_status_members 
           WHERE 
              pr_dato <= '2011-07-01' 
           GROUP BY 
              members ) MaxDatePerMember

      JOIN jos_users ju
         on MaxDatePerMember.members = ju.ID

      JOIN fab_status_members fsm
         on MaxDatePerMember.members = fsm.members
        AND MaxDatePerMember.MaxDate = fsm.pr_dato

         JOIN fab_status_type fst
            on fsm.statustype = fst.id

            JOIN fab_quota as fq
               on fst.statusType = fq.quotaType

Я ДУМАЮ, что у меня есть все, что вы хотите, и позвольте мне повторить простымслова, что я думаю, что вы хотите.Каждый участник может иметь несколько записей статуса (через Fab_Status_Members).Вы ищете всех участников и их статус НАИБОЛЕЕ ПОСЛЕДНИЙ на определенную дату.Это первый запрос.

Исходя из того, что бы пользователи ни подходили, я присоединяюсь к таблице пользователей, чтобы получить информацию об их имени (первое объединение).

Теперь вернемся к сложной части.,Начиная с первого запроса, который определил самую последнюю активность состояния даты, повторно присоединитесь к той же таблице (fab_status_members) и получите фактический код состояния SPECIFIC до последней даты состояния для этого участника (второе присоединение).

Из результата получения правильного STATUS для каждого члена в максимальную дату, вам нужно получить ТИП статуса, который представляет код (третье соединение с fab_status_type).

И, наконец, из знания fab_status_type, каковотип квоты.

Группа не требуется, так как первый запрос группируется по идентификатору участника и возвращает одну запись на человека (ЕСЛИ ... возможно иметь несколько типов состояния в одном и том же).день в таблице fab_status_members ... если это не полное поле даты / времени, то все в порядке)

Не уверен в столбце "takst", из какой таблицы идет таблица, но я пытаюсь полностью определитьимена таблиц (или псевдонимов), из которых они исходят, я думаю, это происходит из таблицы QuotaType.

... РЕДАКТИРОВАТЬ из комментария ...

Извините, да, FQ за последнее присоединение.Что касается того, что он не возвращает никаких строк, я бы попробовал их по одной за раз и посмотрел, где разрыв ... Я бы начал по одной за раз ... сколько из запроса maxdate, затем добавил бы соединение для пользователей, чтобы сделатьверный счетчик записей вернул.Затем добавьте FSM (повторное присоединение) для конкретного действия участника / даты, ТО в тип статуса ... где-то в цепочке его нет, и единственное, о чем я могу подумать, - это пропустить тип статуса как статус любого участника.должен был бы быть связан с одним из пользователей, и он должен найти себя, поскольку именно отсюда произошла максимальная дата.Я угадываю его где-нибудь на присоединение к типу статуса или квоты.

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