回答

收藏

MySQL默认键通过键选择行或返回

技术问答 技术问答 160 人阅读 | 0 人回复 | 2023-09-14

我在MySQL选择其他语言的文本有以下语言表。- c1 G  W- |5 T: V3 E3 F/ n/ r
CREATE TABLE `lang` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`group` INT(10) UNSIGNED NOT NULL,`text` VARCHAR(255) NULL DEFAULT NULL,`language` VARCHAR(10) NOT NULL DEFAULT 'def',PRIMARY KEY (`id`),UNIQUE INDEX `group_language` (`group`,`language`))COLLATE='utf8_general_ci'ENGINE=InnoDBROW_FORMAT=DEFAULT该表包含以下数据
0 {9 p; t8 J) x1 Y* eid  group  text               language1 1 1                                                                                                                                                 This is English    def2 2 2 2                                Helo sir           def3 3 3 3                 how are you?       def 4  3                                       Wie geht es dir?   de组字段告诉我每个翻译属于哪些文本。在上面的例子中,组 3有默认文本(英语)和德语翻译。
: t' l- {' l6 \; F( ^. h* Z现在,我想选择所有的德语文本,如果没有,我将使用后备英语文本。
  {+ j# u- O; [' T5 [7 T有些人知道如何整合它们SQL语句中吗?
& P, {( e( C3 {; i) q$ C) i, `; P# n                                                               
4 t0 I5 J- A# ^. x1 ]    解决方案:                                                               
, d0 C9 h* V) ?0 Z4 }                                                                SELECT  DISTINCT        COALESCE(b.ID,a.ID) ID,       COALESCE(b.`GROUP`,a.`GROUP`) `GROUP`,       COALESCE(b.`text`,a.`text`) `text`,       COALESCE(b.language,a.language) languageFROM   TableName a       LEFT JOIN    SELECT ID,`GROUP`,`text`,language            FROM tableName            WHERE language = 'de       b ON a.ID  b.ID AND a.`GROUP` = b.`GROUP`SQLFiddle演示
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则