假设我想加入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
?
答案 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