在条件为“ ON”的情况下联接两个表

时间:2019-01-08 10:32:30

标签: 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      |

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

2 个答案:

答案 0 :(得分:2)

insert into Customer(id , name) values (1, 'na1') , (2, 'na2') ,(3, 'na3').. 中找不到记录时,您希望LEFT JOIN上的Table2的{​​{1}}默认值为code

'OTH'

答案 1 :(得分:0)

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

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

-输出

enter image description here