首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在翻译表中没有找到记录,则选择列。

如果在翻译表中没有找到记录,则选择列。
EN

Stack Overflow用户
提问于 2016-02-18 13:59:37
回答 2查看 43关注 0票数 2

我有以下两张表:

characteristics

代码语言:javascript
复制
╔════╤═══════╗
║ id │ value ║
╠════╪═══════╣
║ 1  │ A     ║
╟────┼───────╢
║ 2  │ B     ║
╟────┼───────╢
║ 3  │       ║
╟────┼───────╢
║ 4  │ X     ║
╚════╧═══════╝

characteristics_translations

代码语言:javascript
复制
╔════╤════════════════════╤══════════╤══════════════╗
║ id │ characteristics_id │ language │ title        ║
╠════╪════════════════════╪══════════╪══════════════╣
║ 1  │ 3                  │ en       │ EN - Cookies ║
╟────┼────────────────────┼──────────┼──────────────╢
║ 2  │ 3                  │ fr       │ FR - Cookies ║
╟────┼────────────────────┼──────────┼──────────────╢
║ 3  │ 3                  │ de       │ DE - Cookies ║
╟────┼────────────────────┼──────────┼──────────────╢
║ 4  │ 4                  │ en       │ EN - Apples  ║
╟────┼────────────────────┼──────────┼──────────────╢
║ 5  │ 4                  │ fr       │ FR - Apples  ║
╚════╧════════════════════╧══════════╧══════════════╝

我试图在MySQL中创建一个查询,在该查询中,如果翻译表中有一个已定义的title,则选择所有characteristics并将其连接到characteristics_translations。如果没有,则应该从value中选择列characteristics

这就是我迄今为止尝试过的:

代码语言:javascript
复制
SELECT c.id, 
       [c.value OR ct.title] 
FROM   `characteristics` c 
       LEFT JOIN `characteristics_translations` ct 
              ON c.id = ct.characteristics_id 
WHERE  ct.language = 'de' 
        OR ct.language = NULL; 

输出应该如下所示:

代码语言:javascript
复制
{
  "0":{
    id: "1",
    title: "A"
  },
  "1":{
    id: "2",
    title: "B"
  },
  "2":{
    id: "3",
    title: "DE - Cookies"
  },
  "3":{
    id: "4",
    title: "X"
  },
}

终解

代码语言:javascript
复制
SELECT c.id, COALESCE(ct.title, c.value) title 
FROM   `characteristics` c 
       LEFT JOIN `characteristics_translations` ct 
              ON c.id = ct.characteristics_id 
              AND ct.language = 'de'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-18 14:08:09

使用coalesce()从参数列表中获得第一个非空值:

代码语言:javascript
复制
SELECT c.id, 
       coalesce(ct.title, c.value) as title
FROM   `characteristics` c 
       LEFT JOIN `characteristics_translations` ct 
              ON c.id = ct.characteristics_id 
WHERE  ct.language = 'de' 
        OR ct.language = NULL; 
票数 1
EN

Stack Overflow用户

发布于 2016-02-18 14:07:28

试试聚结

代码语言:javascript
复制
SELECT c.id, COALESCE(ct.title, c.value) 
FROM   `characteristics` c 
       LEFT JOIN `characteristics_translations` ct 
              ON c.id = ct.characteristics_id 
WHERE  ct.language = 'de' 
        OR ct.language = NULL;

它将从给定的参数列表返回第一个非空值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35483499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档