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

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

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

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

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


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

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

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

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

И как, это все победить, я пока не смог придумать.
...
Рейтинг: 0 / 0
Получение отличающихся строк из двух таблиц JOIN
    #40093656
Flashpoke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то так?
Код: 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
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение отличающихся строк из двух таблиц JOIN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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