【问题标题】:MySQL Conditional Left Join With DefaultMySQL 条件左连接默认
【发布时间】:2015-08-21 14:48:15
【问题描述】:

有没有办法创建一个条件left join,如果没有找到匹配项,它会将left join 设置为默认值?

我有一个client 表和一个preference 表。 preference 表中的记录 0 是我的全局默认首选项。在某些情况下,客户端可能会覆盖全局引用,在这种情况下,客户端将在preference 表中拥有自己的记录。

所以,我希望在client.ClientID = preference.ClientID 上对首选项表进行left join,但是如果没有匹配项,那么我想离开加入preference.ClientID = 0

【问题讨论】:

  • 如果你有clientID <> 0 你需要限制然后只选择这个?

标签: mysql left-join conditional


【解决方案1】:

SqlFiddle Demo

select * from client, preference
where preference.clientID in (select MAX(preference.ClientID)
                              from preference 
                              where preference.ClientID = client.ClientID OR preference.ClientID = 0)

select client.name, MAX(preference.ClientID)
from client
left join preference on preference.ClientID = client.ClientID OR preference.ClientID = 0
group by client.name

【讨论】:

  • 某种意义上,如果我对 ClientID 8 进行了覆盖,那么我会为它们返回两个结果。一个是匹配的,一个是默认值。在这种情况下,我只需要一个带有覆盖的结果。
  • 我认为它仍然需要一些工作。我建议删除您的第一个查询,因为它会重复。我认为第二个适用于一个特定的 ClientID,但您需要在where 中添加它。我希望看到这项工作适用于所有客户。我需要考虑一下您的第三个查询。
  • @VenomFangs 哦,我明白了
  • @VenomFangs 再次更新
  • 您在上次更新之前的第三个查询有效。正如Max()group by 所做的那样,它一起给出了预期的结果。我得看看这个新帖子,看看它是否也有效。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 2011-04-29
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2019-08-08
  • 2016-03-17
相关资源
最近更新 更多