mysql - 获取连接表中存在和不存在的所有数据

标签 mysql sql

连接表中的记录,存在和不存在

表格文章;

+------------+-------+--------+-
| id| cat-id |aut-id |content |
+------------+-------+--------+
| 1 |   1    |    3  |eeeeeee |
| 2 |   2    |    4  |fffffff |
| 3 |   8    |    5  |ggggggg |
| 4 |   9    |    2  |jjjjjjj |
+------------+-------+--------+

表格类别;

+--------------+
| id| cat-name |
+--------------+
| 1 |   phy    |
| 2 |   che    | 
| 3 |   bio    |
+--------------+

表作者;

+--------------+
| id| aut-name |
+--------------+
| 4 |   joe    |
| 5 |   sam    | 
| 6 |   kim    |
+--------------+

我想要这个结果

+------------+-------+--------+--------+--------+
| id| cat-id |aut-id |cat-name|aut-name|content |
+------------+-------+--------+--------+--------+
| 1 |   1    |    3  |  phy   |unknown |eeeeeee |
| 2 |   2    |    4  |  che   |  joe   |fffffff |
| 3 |   8    |    5  |  uncat |  sam   |ggggggg |
| 4 |   9    |    2  |  uncat | unknown|jjjjjjj |
+------------+-------+--------+--------+--------+

最佳答案

只需左连接数据,这样就不会过滤掉丢失的数据

查询:

SELECT 
    a.`id`, 
    a.`cat-id` , 
    a.`aut-id` , 
    COALESCE(c.`cat-name`, 'uncat') as 'cat-name',
    COALESCE(a1.`aut-name`, 'unknown') as 'aut-name' ,
    a.`content` 
FROM `article` a
LEFT JOIN `categories` c on c.`id` = a.`cat-id`
LEFT JOIN `authors` a1 on a1.`id` = a.`aut-id`

使用 COALESCE 处理空值并放入您想要的结果

DEMO

输出:

+------------+-------+--------+--------+--------+
| id| cat-id |aut-id |cat-name|aut-name|content |
+------------+-------+--------+--------+--------+
| 1 |   1    |    3  |  phy   |unknown |eeeeeee |
| 2 |   2    |    4  |  che   |  joe   |fffffff |
| 3 |   8    |    5  |  uncat |  sam   |ggggggg |
| 4 |   9    |    2  |  uncat | unknown|jjjjjjj |
+------------+-------+--------+--------+--------+

关于mysql - 获取连接表中存在和不存在的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25534558/

相关文章:

sql - 又大又丑的光标

mysql - 为 3 个 mySQL 表之间的每个结果显示一行

SQL:根据用户注册表和事件日志计算第一天保留率

mysql - 按桥接表中的结果计数对 JOIN 进行排序

mysql - 更新最新记录

java swing jtable 在单个表中从数据库添加两个表

MySQL 增加了同比比较

mysql - 在Mysql中将数字转换为单词

mysql - COALESCE 提取日期和字符串的结果

php - 比较 2 个 MySQL 表的公共(public)字段,识别仅在其中 1 个表中的数据