连接两个表,在其“on”中有一个条件

g6baxovj  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(347)

我有下面两张table
表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      |

我要整排第二张table。我不想使用子查询或任何硬编码,因为它是一个动态数据,所以“其他”一词在不同的场景中会有所不同。

ukqbszuj

ukqbszuj1#

--创建第一个表并加载数据

create table #t1 (id int, category varchar(30) )

insert into #t1  (id,category)
values (1, 'soap')
insert into #t1  (id,category)
values (2, 'grocery')
insert into #t1  (id,category)
values (3, 'snacks')
insert into #t1  (id,category)
values (4, 'vegetables')
insert into #t1  (id,category)
values (5, 'dairy')
insert into #t1  (id,category)
values (6, 'clothes')
insert into #t1  (id,category)
values (7, 'books')
insert into #t1  (id,category)
values (8, 'shoes')

--创建第二个表并加载数据

create table #t2 (id int, parent_cat varchar(30) , code varchar(10))

insert into #t2 (id, parent_cat, code)
values(1,'soap','SHP')
insert into #t2 (id, parent_cat, code)
values(2,'clothes','CLTH')
insert into #t2 (id, parent_cat, code)
values(3,'snacks','SNCK')
insert into #t2 (id, parent_cat, code)
values(4,'books','SHP')
insert into #t2 (id, parent_cat, code)
values(5,'others','OTH')

--最终查询

SELECT #t1.id, #t1.category, isnull(#t2.code, 'OTH') code  from #t1 
LEft join #t2 on #t1.category = #t2.parent_cat

--输出

yzuktlbb

yzuktlbb2#

你想要一个 LEFT JOINTable2 默认情况下 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

相关问题