mysql对所有找到的记录应用coalesce

yqyhoc1h  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(519)

假设我有一组关系,对于这些关系中的每一个,我都有特征。在函数中,我查询以获取所有关系以及附加到该关系的所有特征。每个特征都有某种语言的内容。如果我有3个特性,那么这些特性翻译的示例表是

Relation1 -> F1-EN, F2-EN, F3-EN
          -> F1-DE, F2-DE,   -
          -> F1-SP,   -  , F3-SP
          -> F1-FR,   -  ,   -
Relation2 ....

我想能够得到所有这些功能,根据我的主要语言,我发送,作为一个主要语言,我应该得到的de发送
f1 de、f2 de、f3 en(因为f3的de值为空)

-- get relation fields --,
GROUP_CONCAT(DISTINCT coalesce(ft2.name, ft1.name) SEPARATOR ',') AS features

FROM 'relations'

LEFT JOIN 'feature_translations' ft1 ON relations.feature_id = 
ft1.feature_id
LEFT JOIN 'feature_translations' ft2 ON relations.feature_id = 
ft2.feature_id AND ft2.language_id = 'FR'

GROUP BY relations.relation_id

这样,我只能得到(f1 fr),因为coalesce返回第一个非空值,但是我想要所有的特性f1 fr,f2 en,f3 en

ddhy6vgd

ddhy6vgd1#

编辑:
我试着用sqlfiddle('de'作为主语言)重现您的问题。
你可能需要两组人

SELECT f.relation_id, GROUP_CONCAT(f.feature) as features 
FROM
  (SELECT relations.relation_id, coalesce(ft1.name, ft2.name) AS feature
   FROM relations
     LEFT JOIN feature_translations ft1 ON relations.feature_id =
                                           ft1.feature_id AND ft1.language_id = 'DE'
     LEFT JOIN feature_translations ft2 ON relations.feature_id =
                                           ft2.feature_id AND ft2.language_id != 'DE'
   GROUP BY relations.relation_id, relations.feature_id) as f
GROUP BY f.relation_id;

相关问题