mysql - 连接两个表,其条件为 "ON"

标签 mysql sql

我有以下两张表

表1

|      id    |  category     |
|------------|---------------|
|      1     |  soap         |
|      2     |  grocery      |
|      3     |  snacks       |
|      4     |  vegetables   |
|      5     |  dairy        |
|      6     |  clothes      |
|      7     |  books        |
|      8     |  shoes        |  

表2

|      id    |  parent_cat   |      code     |
|------------|---------------|---------------|
|      1     |  soap         |      SHP      |
|      2     |  clothes      |      CLTH     |
|      3     |  snacks       |      SNCK     |
|      4     |  books        |      BOK      |
|      5     |  others       |      OTH      |

我想以每个类别都会获得一个代码的方式加入他们 如果类别不存在于其他表中,它将获得与其他表相对应的代码

期望的结果

|      id    |  category     |      code     |
|------------|---------------|---------------|
|      1     |  soap         |      SHP      |
|      2     |  grocery      |      OTH      |
|      3     |  snacks       |      SNCK     |
|      4     |  vegetables   |      OTH      |
|      5     |  dairy        |      OTH      |
|      6     |  clothes      |      CLTH     |
|      7     |  books        |      BOK      |
|      8     |  shoes        |      OTH      |

我想要第二个表的整行。 我不想使用子查询或任何硬编码,因为它是动态数据,因此“其他”一词在不同的情况下会有所不同。

最佳答案

当没有记录时,您希望在 Table2 上使用 LEFT JOIN,默认 code 值为 'OTH'Table2中找到:

SELECT
    t1.id,
    t1.category,
    COALESCE(t2.code, 'OTH') code,
    t2.id
FROM 
    Table1 t1
    LEFT JOIN Table2 t2 ON t1.category = t2.parent_cat

关于mysql - 连接两个表,其条件为 "ON",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089909/

相关文章:

mysql - 在另一个表的帮助下更新 mysql 中的列

mysql - 无法从 MySQL 中删除记录。错误说列不存在,但它显然存在

mysql - 记录排序依据; future 的 ASC,过去的 DESC

sql - 错误编号SQL 中获取的行数

c# - SqlDataReader.GetValue 按列名获取数据的方法

sql - 需要使用 SQL 减去两列

php - 我如何根据用户日期获取数据

php - 如何使用pdo mysql在插入记录期间检查字段数据类型是否一致

sql - 连接事件乏味,未在函数中触发

mysql - 如何在两个表上执行 MYSQL 连接,其中第二个表的外键值的条件也可以为空