我已经阅读并在这里学到了很多东西,到目前为止没有提出任何问题就解决了很多问题,但是我无法应对这个问题。
我有三张桌子:
-programs
->ProgramID (Primary Unique)
->ProgramName
->AuditID
-audits
->AuditID (Primary Unique)
->VenueName
->Address
-events
->EventID (Primary Unique)
->EventDate
->ProgramID
->AuditID
事件是当天在舞台上播放的节目的实例。 一个程序的多个实例可能会在一天内执行,或无如果没有播放。这基本上是一张临时表,每天重新填充。门票可以从当天播放的节目中购买。
审核是执行播放的实际阶段。剧院可以有几个阶段。
节目是多年来在剧目中播放的剧本。执行它的最后一个阶段是存储的,当某人检索到某个节目的信息时,该节目在该舞台仍然可以链接的当天没有播放。
我现在正在使用此查询:
SELECT
programs.ProgramID,
programs.ProgramName,
programs.AuditID,
events.EventID,
events.EventDate,
audits.VenueName,
audits.Address
FROM programs
LEFT JOIN events
ON programs.ProgramID = events.ProgramID
JOIN audits
ON programs.AuditID = audits.AuditID
WHERE programs.ProgramID = :ProgramID
我需要的是条件JOIN,因此当events.AuditID不为null时,审计表将使用events.AuditID而不是programs.AuditID加入。
提前致谢!
答案 0 :(得分:0)
我相信你应该JOIN
使用IFNULL(events.AuditID, programs.AuditID)
来解决这个问题......
SELECT
programs.ProgramID,
programs.ProgramName,
programs.AuditID,
events.EventID,
events.EventDate,
audits.VenueName,
audits.Address
FROM programs
LEFT JOIN events
ON programs.ProgramID = events.ProgramID
JOIN audits
ON IFNULL(events.AuditID, programs.AuditID) = audits.AuditID
WHERE programs.ProgramID = :ProgramID