首页 > 解决方案 > 加入子查询时使用 if 条件

问题描述

Events.Type如果字段等于 1,我需要在以下查询中使用 XXXXX 的查询部分如下所示:

ON Stages.ID = Abandonments.IDstage

如果它是 2 的 Events.Type ,则带有 XXXXX 的查询部分如下所示:

ON Stages.ID > Abandonments.IDstage

询问

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

谢谢

标签: mysql

解决方案


您的 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

推荐阅读