Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение отличающихся строк из двух таблиц JOIN / 4 сообщений из 4, страница 1 из 1
16.08.2021, 14:25
    #40091021
vollander
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение отличающихся строк из двух таблиц JOIN
Помогите решить задачу на SQL, над которой я ломаю голову уже несколько дней.

Даны две таблицы с одинаковой структурой: key1, key2, value1, value2, value3. Key1 и key2 очевидно ключи. В таблицах могут быть отличия как в ключах, так и значениях, значения могут содерждать NULL. В обоих таблицах может храниться строка с одинаковым ключом, отличающаяся, например, только одним значением.

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

Итого должна получиться таблица со столбцами: source (из какой таблицы строка), key1, key2, value1, value2, value3. Также нужно добавить столбец, который будет указывать причину ошибки: 0 - у таблиц различается атрибутивный состав записей, 1 - запись есть только в одной из таблиц.

СУБД Postgres. UNION использовать нежелательно, EXCEPT также, нужны JOINы.
...
Рейтинг: 0 / 0
16.08.2021, 14:44
    #40091027
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение отличающихся строк из двух таблиц JOIN
обычный full join
Код: sql
1.
2.
select *
from t1 full join t2 on t1.key1=t2.key1 and  t1.key2=t2.key2


а потом, видя результат, добавишь свои "хотелки"
...
Рейтинг: 0 / 0
16.08.2021, 14:56
    #40091032
vollander
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение отличающихся строк из двух таблиц JOIN
court,
full join я уже пытался крутить.

Проблема в том, что результатом является вывод, содержащий в себе отличающиеся строки из t1, но ни одной отличающейся строки из t2.

Также попадает строка, которая полностью одинакова для обоих таблиц, но в одном из value содержит null.

И наконец, full join добавляет в вывод строку, которая содержит во всех ячейках null.

И как, это все победить, я пока не смог придумать.
...
Рейтинг: 0 / 0
29.08.2021, 00:34
    #40093656
Flashpoke
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение отличающихся строк из двух таблиц JOIN
Как-то так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT 'table1' AS "source", key1, key2, value1, value2, value3, 
  CASE WHEN 
    EXISTS(SELECT FROM table2 WHERE key1 = t.key1 AND key2 = t.key2)
    THEN 0 ELSE 1
  END AS error
FROM table1 t
WHERE NOT EXISTS (
  SELECT FROM table2
  WHERE key1 = t.key1 AND key2 = t.key2 AND value1 IS NOT DISTINCT FROM t.value1 AND value2 IS NOT DISTINCT FROM t.value2 AND value3 IS NOT DISTINCT FROM t.value3
)
UNION ALL
SELECT 'table2', key1, key2, value1, value2, value3, 
  CASE WHEN 
    EXISTS(SELECT FROM table1 WHERE key1 = t.key1 AND key2 = t.key2)
    THEN 0 ELSE 1
  END
FROM table2 t
WHERE NOT EXISTS (
  SELECT FROM table1
  WHERE key1 = t.key1 AND key2 = t.key2 AND value1 IS NOT DISTINCT FROM t.value1 AND value2 IS NOT DISTINCT FROM t.value2 AND value3 IS NOT DISTINCT FROM t.value3
);
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение отличающихся строк из двух таблиц JOIN / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]