Как сравнить данные каждой таблицы с оставшимися таблицами - PullRequest
0 голосов
/ 23 марта 2020

Пример ввода и результат У меня есть несколько таблиц, как указано на рисунке. Каждая таблица представляет возможности на каждый день. Моя задача - сравнить возможности в Таблице 1 с Таблицей 2 и Таблицей 3. Таблица 2 с Таблицей 3 и так далее для нескольких таблиц. Обычно, когда я сравниваю 1 таблицу с другой, я выполняю FULL OUTER JOIN и получаю сравнение через отчет TABLEAU. Это хорошо работает в случае 1 сравнения. Но проблема, с которой я сталкиваюсь сейчас, заключается в том, что у меня может быть столько таблиц таким образом, и все их нужно сравнивать друг с другом. Пример: таблицу Jan1 следует сравнивать с таблицей Jan2, таблицей Jan3, таблицей Jan4, так что на сравните с таблицей Jan3, таблицей Jan4, таблицей Jan5, так что ... на

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

1 Ответ

1 голос
/ 23 марта 2020

Метод полного соединения также работает для сравнения более двух таблиц.

Однако MySQL не поддерживает его, поэтому вы можете go для union all:

select
    id,
    name,
    price,
    max(who = 't1') is_in_table1,
    max(who = 't2') is_in_table2,
    max(who = 't3') is_in_table3
from (
    select id, name, price, 't1' who from table1
    union all select id, name, price, 't2' who from table2
    union all select id, name, price, 't3' who from table3
) t
group by id, name, price

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

...