Используйте условие if при присоединении к подзапросу - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно, чтобы в следующем запросе, если поле Events.Type равно 1, чтобы часть запроса с XXXXX была такой:

ON Stages.ID = Abandonments.IDstage

И в случае, если это 2 события.Введите, что часть запроса с XXXXX будет выглядеть следующим образом:

ON Stages.ID > Abandonments.IDstage

QUERY

SELECT
*,
  Events.Type
FROM Participants
  INNER JOIN Times
    ON Participants.ID = Times.IDparticipant
  INNER JOIN Events
    ON Events.ID = Participants.IDevent
    AND Events.ID = Times.IDevent
  INNER JOIN Stages
    ON Events.ID = Stages.IDevent
    AND Stages.ID = Times.IDstage
  LEFT OUTER JOIN (SELECT
      Retired.ID,
      Retired.IDstage,
      Retired.IDparticipant,
      Retired.IDevent
    FROM Retired) Abandonments
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    AND Participants.ID = Abandonments.IDparticipant
    AND Events.ID = Abandonments.IDevent
WHERE Times.IDevent = 31
AND Times.IDstage = 156
ORDER BY Participants.ID

Спасибо

1 Ответ

0 голосов
/ 17 апреля 2019

Ваш SQL-запрос содержит много X и не отображает квалификатор, который вы пытаетесь создать, поэтому я не совсем понимаю намерение, которого вы пытаетесь достичь.

Однако вы описываете решение в своем вопросе.

таким образом:

ON ((Stages.ID = Abandonments.IDstage AND Events.Type = 1) OR 
   (Stages.ID > Abandonments.IDstage AND Events.Type = 2))

Если ни один из этих определенных аргументов не является истинным (скажем, Events.Type = 3), то вам необходимо добавить квалификатор или ложное возвращение, чтобы исключить это целое JOIN

ON ((Stages.ID = Abandonments.IDstage AND Events.Type = 1) OR 
   (Stages.ID > Abandonments.IDstage AND Events.Type = 2)) OR 2=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...