mysql引用外键_MySQL条件引用外键

考虑在数据检索(SELECT)而不是数据操作(INSERT / UPDATE / DELETE)时解决您的问题.

select

o.id,

o.game_id,

coalesce(g.starts_on, o.starts_on) as starts_on,

coalesce(g.ends_on, o.ends_on) as ends_on,

coalesce(g.type, o.type) as type

from observer o

left join game g on g.id = o.game_id

在此查询中,如果o.game_id为NULL,则LEFT JOIN将在游戏表中找不到匹配项,并且其所有列也将为NULL.然后COALESCE()将负责从游戏表中选择值(如果存在)或从观察者那里选择.

您可以在VIEW中使用该查询(如果您愿意),但我不知道它在任何用例中是否表现良好.

通过这种方式,您可以存储“独立”值而无需担心游戏ID是否已设置,因为只有在game_id不为NULL时才会使用它们.

请注意,您的问题可能会以更“干净”的方式解决,从而改变架构.使用列game.observer_id和observer.game_id,它看起来像一个循环关系,可以被认为是“设计气味”.但是,如果不了解您的数据逻辑,我无法提出更好的方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值