如何解决JOIN返回一行时使用ValueA,否则使用ValueB如默认值
在我的数据库中,我有四个用于表单构建器的表。
-
fields
(fieldID(PK)
,typeID
,fieldName
,...)-此表是所有字段的逐行列表,格式为 -
fields_types
(typeID(PK)
,htmlType
,...)-这是一个将字段链接到html类型(和其他设置)的表 -
fields_meta
(FieldMetaID(PK)
,FieldID
,mName
,mValue
)-字段的其他设置,但更具体。 textarea字段可能具有height属性,但几乎没有其他字段会使用它。 -
fields_tyeps_meta
(TypeMetaID(PK)
,typeID
,tmName
,tmValue
)-定义字段可以具有的无关设置,如果是,则还提供默认值没有明确设置)
所以我的查询当前看起来像这样
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
的方式,以便当行JOIN
到Fields_Meta
时不返回行(没有mValue
),它返回tmValue
我意识到我可以使用类似(CASE WHEN mValue = "" THEN tmValue ELSE mValue END) AS UseValue
之类的东西,但是我可能在某些字段中希望将值设置为空。
编辑:我可能可以对子查询和COUNT
进行一些操作,并使用基于此的CASE
决策。这可能不是最健康的性能,但是此查询将运行并缓存自身,直到服务器重新启动,或者直到被告知再次运行(更新为表单设计)为止
解决方法
您似乎只想¢oalesce()
:
coalesce(FM.mValue,FT.tmValue) as UseValue
当FM.mValue
为null
时,coalesce()
返回FT.tmValue
。
如果要在结果集中保留null
中的FM
个值,请改用case
表达式:
case when FM.FieldID IS NULL THEN FT.tmValue ELSE FM.mValue END as UseValue
这句话是:left join
确实在FM
中找到匹配项时,请从该行中使用mValue
(即使它是null
),否则请使用{{ 1}}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。