объединяйте таблицы и ищите данные в двух таблицах различий в mysql - PullRequest
0 голосов
/ 23 января 2020

Таблица 1: полная

id name country street
1  ab   xx      xxx
2  bd   xx      xxx
3  dc   xx      xxx

Таблица 2: старые_данные

id language area_name  market_name
1  en       xx         xxx
2  cz       xx         xxx

Таблица 3: новые_данные

id language area market
2  fr       xx   xxx
3  cz       xx   xxx

Теперь, с MySQL, I хочу объединить таблицы и найти связанные детали. Logi c: если недоступно в 'new_data', найдите его только в 'old_data'

Вывод:

id name country street language area market
1  ab   xx      xxx    en       xx   xxx
2  bd   xx      xxx    fr       xx   xxx
3  dc   xx      xxx    cz       xx   xxx

Примечание: Нет строк для таблицы 1 = Нет строк для выходной таблицы.

1 Ответ

1 голос
/ 23 января 2020

Вы можете left join две таблицы, а затем использовать coalesce(), чтобы выбрать соответствующие значения:

select 
    t.*, 
    coalesce(n.language, o.language) language,
    coalesce(n.area, o.area) area,
    coalesce(n.market, o.market) market
from table_full f
left join table_old_data on o.id = f.id
left join table_new_data n on n.id = f.id

Это предполагает, что language, area и market никогда не null. Если это не случай, вы можете изменить выражения coalesce() на:

select 
    t.*, 
    case when n.id is not null then n.language else o.language end language,
    case when n.id is not null then n.area else o.area end area,
    case when n.id is not null then n.market else o.market end market
from table_full f
left join table_old_data on o.id = f.id
left join table_new_data n on n.id = f.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...