gpt4 book ai didi

MySQL conditional JOIN 使用来自不同表的键进行匹配

转载 作者:行者123 更新时间:2023-11-30 23:33:25 25 4
gpt4 key购买 nike

我在这里阅读和学习了很多东西,到目前为止,我没有问任何问题就解决了很多问题,但我无法应付这个问题。

我有三个表:

-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
  • 如果该程序没有事件,则 LEFT JOIN 会向我提供有关程序和审核的信息,将事件信息留空。好。
  • 如果事件与上次进行的审核相同,也可以。太好了。
  • 问题是如果它在不同的审计中播放,因为审计表的 JOIN 是基于 programs.AuditID key 进行的,现在已经过时了。

我需要的是条件 JOIN,这样当 events.AuditID 不为 null 时,使用 events.AuditID 而不是 programs.AuditID 来连接审计表。

提前致谢!

最佳答案

我相信您应该能够使用 IFNULL(events.AuditID, programs.AuditID) JOIN 来解决这个问题...

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

关于MySQL conditional JOIN 使用来自不同表的键进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9422098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com