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