当 JOIN returns 行时使用 ValueA,否则使用 ValueB(如默认值)

Use ValueA when JOIN returns a row, otherwise ValueB (like a default)

我的数据库中有四个 table 表单生成器。

所以我的查询目前看起来像这样

SELECT * 
  FROM Fields F
  JOIN Field_Types FT 
    on FT.FieldID = F.FieldID
  LEFT 
  JOIN Field_Meta FM 
    on FM.FieldID = F.FieldID

我想知道是否有办法加入 Fields_Types_Meta 以便当行的 JOINFields_Meta 不 return 一行时(没有 mValue), 它 returns tmValue

我知道我可以使用 (CASE WHEN mValue = "" THEN tmValue ELSE mValue END) AS UseValue 之类的东西,但我可能有一些字段我想允许将值设置为空。


编辑:我可能可以用子查询和 COUNT 做一些事情,使用基于此的 CASE 决定。它可能不是最健康的性能明智的,但是这个查询 运行s 和缓存自身直到服务器重新启动,或者直到它被告知再次 运行 (更新表单设计)

看来你只是想要 ¢oalesce():

coalesce(FM.mValue, FT.tmValue) as UseValue

FM.mValuenull时,coalesce() returns FT.tmValue改为

如果要在结果集中保留 FM 中的 null 个值,请改用 case 表达式:

case when FM.FieldID IS NULL THEN FT.tmValue ELSE FM.mValue END as UseValue

这句话为:当 left join 确实在 FM 中找到匹配项时,使用该行的 mValue(即使它是 null),否则使用FT.tmValue.