SQL - 左连接失败时显示列中的值

时间:2018-04-23 13:22:37

标签: mysql join left-join

假设我想加入2张桌子,其中一张是这样的。

| Category  |
|-----------|
| id | name |
|----|------|
|  1 | Foo  |
|  2 | Bar  |
|  3 | Baz  |

另一个是这样的:

|   Page    |
|-----------|
| id | cat  |
|----|------|
|  1 | 0    |
|  2 | 1    |
|  3 | 3    |

正如您所见,Page表中的cat 0不在Category表中。不幸的是,我们的系统是这样的,由于其他代码,我无法将0表中包含Category的类别添加到其中。

现在出现了一百万美元的问题:是否可以在category.id上加入page.cat并在page.cat等于0时设置if语句,以便将类别名称显示为Default

2 个答案:

答案 0 :(得分:7)

如果缺少一个,则执行左连接,并使用COALESCE解码空值。

SELECT Page.*, COALESCE(name , 'Default')
FROM Page
LEFT JOIN Category
  ON Page.cat = Category.id;

SELECT P.*, IFNULL(C.name , 'Default') as Name   
FROM Page P   
LEFT JOIN Category C ON P.cat= C.id  

答案 1 :(得分:2)

试试这个:

SELECT 
    p.id, 
    p.cat,
    case when p.cat = 0 then "DEFAULT" ELSE c.name END AS cat_name
FROM 
    cat c RIGHT JOIN page p
ON c.id = p.cat
ORDER BY p.id