Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Таблица из результата сравнения двух других таблиц / 5 сообщений из 5, страница 1 из 1
31.05.2017, 21:02
    #39463360
Relative0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблица из результата сравнения двух других таблиц
Добрый день.
В mysql я почти полный ноль, поэтому прошу помощи.

1) Есть две базы данных, в которых есть идентичные по своей структуре таблицы
db1.table1
db2.table2
2) Размер самих таблиц может быть одинаковым, а может отличаться. Если размеры разные, то "лишние" элементы в сравнении не участвуют
3) В каждой таблице есть уникальные значения (nn), которые идентичны в обеих таблицах
4) Размер таблиц около 2000 строк
5) Нужно сравнить две таблицы между собой, и результат должен содержать только столбцы с разными значениями

----
db1.table1
Код: plaintext
1.
2.
3.
nn   data1   data2   data3   data4
01    11      12      13      14
02    21      22      23      24
03    31      32      33      34

db2.table2
Код: plaintext
1.
2.
3.
4.
nn   data1   data2   data3   data4
01    11       00       13      14
02    21      22      23      24
03     55       32       99       34
04    41      42      43      44

Сравниваем... Результат такой:
db2.table3
Код: plaintext
1.
2.
3.
nn   diff_data   db1.data   db2.data
01     data2        12         00
03     data1        31         55
03     data3        33         99

Хотелось бы именно такую результирующую таблицу.
Если это в принципе невозможно, тогда можно так:

db2.table3
Код: plaintext
1.
2.
nn   data1   data2   data3   data4
01    --      00      --      --
03    55      --      99      --
...
Рейтинг: 0 / 0
31.05.2017, 21:35
    #39463369
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблица из результата сравнения двух других таблиц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t11.nn, 
       CASE WHEN t1.data1=t2.data1 THEN '--' ELSE t2.data1 END data1,
       CASE WHEN t1.data2=t2.data2 THEN '--' ELSE t2.data2 END data2,
       CASE WHEN t1.data3=t2.data3 THEN '--' ELSE t2.data3 END data3,
       CASE WHEN t1.data4=t2.data4 THEN '--' ELSE t2.data4 END data4
FROM db1.table1 t1, db2.table2 t2
WHERE t1.nn = t2.nn
  AND (t1.data,t1.data2,t1.data3,t1.data4) NOT IN (t2.data,t2.data2,t2.data3,t2.data4)
...
Рейтинг: 0 / 0
01.06.2017, 19:27
    #39464075
Relative0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблица из результата сравнения двух других таблиц
Да. Спасибо. Этот вариант работает. Точнее, почти работает, т.к. выдает ошибку
Код: plsql
1.
ERROR 1241 (21000): Operand should contain 4 column(s)


Если вместо
Код: plsql
1.
AND (t1.data1,t1.data2,t1.data3,t1.data4) NOT IN (t2.data1,t2.data2,t2.data3,t2.data4)


написать
Код: plsql
1.
AND (t1.data1) NOT IN (t2.data1)


тогда работает, но не так как нужно, т.е. выдает один только результат вместо всех.
...
Рейтинг: 0 / 0
01.06.2017, 19:34
    #39464078
Relative0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблица из результата сравнения двух других таблиц
Разобрался. Гугл подсказал, что этот баг нужно фиксить c помощью SELECT
Код: plsql
1.
AND (t1.data1,t1.data2,t1.data3,t1.data4) NOT IN (SELECT t2.data1,t2.data2,t2.data3,t2.data4)



Еще раз спасибо за помощь)
...
Рейтинг: 0 / 0
01.06.2017, 19:37
    #39464081
Relative0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Таблица из результата сравнения двух других таблиц
Хотя вот так
Код: plsql
1.
AND (t1.data1,t1.data2,t1.data3,t1.data4) NOT IN ((t2.data1,t2.data2,t2.data3,t2.data4))


выполняется быстрей.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Таблица из результата сравнения двух других таблиц / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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