объединить две таблицы с условием в его «ON» - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующие две таблицы

Table1

|      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      |

Я хочу присоединиться к ним таким образом, чтобы каждая категория получала код и если категория отсутствует в другой таблице, он получит код, соответствующий Others

Желаемый результат

|      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 голосов
/ 08 января 2019

- Создать первую таблицу и загрузить данные

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

0 голосов
/ 08 января 2019

Требуется LEFT JOIN для Table2 со значением по умолчанию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...