我有以下两个表
表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 |
我想要第二张桌子的整行。 我不想使用子查询或任何硬编码,因为它是动态数据,因此“其他”一词在不同情况下会有所不同。
答案 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
-输出