当 JOIN returns 行时使用 ValueA,否则使用 ValueB(如默认值)
Use ValueA when JOIN returns a row, otherwise ValueB (like a default)
我的数据库中有四个 table 表单生成器。
fields
(fieldID(PK)
, typeID
, fieldName
, ...) - 这个 table 是所有字段的逐行列表形式
fields_types
(typeID(PK)
, htmlType
, ...) - 这是将字段链接到 html 类型(和其他设置)的 table )
fields_meta
(FieldMetaID(PK)
, FieldID
, mName
, mValue
) - 字段的附加设置,但更具体。文本区域字段可能具有高度属性,但几乎没有其他字段会使用该属性。
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
不 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.mValue
为null
时,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
.
我的数据库中有四个 table 表单生成器。
fields
(fieldID(PK)
,typeID
,fieldName
, ...) - 这个 table 是所有字段的逐行列表形式fields_types
(typeID(PK)
,htmlType
, ...) - 这是将字段链接到 html 类型(和其他设置)的 table )fields_meta
(FieldMetaID(PK)
,FieldID
,mName
,mValue
) - 字段的附加设置,但更具体。文本区域字段可能具有高度属性,但几乎没有其他字段会使用该属性。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
不 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.mValue
为null
时,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
.