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

Fra*_*oot 0 mysql join left-join

假设我想加入2个表,其中一个表是这样的.

| Category  |
|-----------|
| id | name |
|----|------|
|  1 | Foo  |
|  2 | Bar  |
|  3 | Baz  |
Run Code Online (Sandbox Code Playgroud)

另一个是这样的:

|   Page    |
|-----------|
| id | cat  |
|----|------|
|  1 | 0    |
|  2 | 1    |
|  3 | 3    |
Run Code Online (Sandbox Code Playgroud)

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

现在到了一百万美元的问题:是否有可能加盟category.idpage.cat,并设置一个if语句时,page.cat等于0以显示分类名称Default

Jua*_*eza 7

如果只有0是缺少的那么做左连接并用于COALESCE解码空值.

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

要么

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

  • 无论有多少缺失值,这都可以工作.它会为所有人返回同样的东西.这可能是也可能不是OP想要的,但这是一个很好的起点. (2认同)