我的数据库中有四个用于表单构建器的表。
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
toFields_Meta
不返回一行(否mValue
)时,它返回tmValue
我意识到我可以使用类似的东西(CASE WHEN mValue = "" THEN tmValue ELSE mValue END) AS UseValue
,但我可能有一些字段我想允许将值设置为空。
编辑:我可能可以用子查询做一些事情,并且COUNT
使用CASE
基于它的决定。它可能不是最健康的性能,但是这个查询运行并缓存自己直到服务器重新启动,或者直到它被告知再次运行(更新表单设计)