Как принудительно / условно объединить совершенно не связанные клетки - PullRequest
0 голосов
/ 03 апреля 2020

Я почесал голову от этого и никуда не попал, так что он идет. Имея две таблицы, как показано ниже, как я могу соединить совершенно не связанную ячейку с другой. Мои данные не стандартизированы по ISO и не могут найти способ присоединить Шотландию к Соединенному Королевству Великобритании.

SQL SERVER 2016

tb1

id    Country_ISO
1     United Kingdom of Great Britain
2     Oman

tb2

id    Country
1     United kingdom
2     Scotland
3     Oman

Результат

id    Country           ID    Country_ISO
1     United kingdom    1     United Kingdom of Great Britain
2     Scotland          1     United Kingdom of Great Britain
3     Oman              2     Oman

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Я бы просто добавил еще одну строку в country_iso:

select tb2.*, tb1.id, tb1.country
from tb2 left join
     (select id, country as match_country, country
      from tb1
      union all
      select tb1.id, 'Scotland', tb1.country
      from tb1
      where tb1.id = 1
     ) tb1
     on tb1.country = tb2.match_country;

Подзапрос предлагает, возможно, новую таблицу для вашей базы данных, чтобы упростить эти преобразования.

В качестве альтернативы, вы можете использовать left join и coalesce():

select tb2.*,
       (case when tb2.country = 'Scotland' then 1 else tb1.id end),
       (case when tb2.country = 'Scotland' then 'United Kingdom of Great Britain' else tb1.country end)
from tb2 left join
     tb1
     on tb1.country = tb2.country;

Преимущество этого подхода состоит в том, что запрос может использовать индексы и должен быть быстрым.

0 голосов
/ 03 апреля 2020

Вы можете использовать оператор case в join

select *
from tb2 
left join tb1 on tb1.country_iso=case when tb2.country in ('United Kingdom','Scotland')
                                      then 'United Kingdom of Great Britain' 
                                      else tb2.country end;

Выходы

+----+----------------+----+---------------------------------+
| id |    country     | id |           country_iso           |
+----+----------------+----+---------------------------------+
|  1 | United Kingdom |  1 | United Kingdom of Great Britain |
|  2 | Scotland       |  1 | United Kingdom of Great Britain |
|  3 | Oman           |  2 | Oman                            |
+----+----------------+----+---------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...