Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнение данных из разных таблиц  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Всем добрый день!

етсь две таблицы в разных БД, содержащие следующие данные:

Таблица в БД1
Mark Source Dest
12 A B


Таблица в БД2
Mark Source Dest
12 В А


По сути это одно и тоже соединение, может кто подскажет как составить запрос, чтобы машина понимала при сравнении, что эти записи идентичны?
27 мар 15, 08:46    [17438292]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
Ну, допустим, поняла... и что? Цель-то какая?
27 мар 15, 08:51    [17438299]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Akina,

Найти разницу, чтобы потом или добавит или обновить данные
27 мар 15, 09:28    [17438408]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Вячеслав Д
Member

Откуда:
Сообщений: 37
Веткин Сергей,

Ну могу предположить что вы хотите получить данные из одной таблице и не важно что у них содержимое отличается
Тогда решение примерно следующее

CREATE TABLE #Res
(Mark int,
Info VarChar(240),
Info1 VarChar(240)

INSERT INTO #Res (Mark,Info,Info1)
Select Mark,Source,Desert
From database1.dbo.MyTable a

INSERT INTO #Res (Mark,Info,Info1)
Select Mark,Source,Desert
From database2.dbo.MyTable a
WHERE NOT EXISTS(Select 1 FROM #Res b WHERE a.Mark=b.Mark)

DROP TABLE #Res


Или еще проще

SELECT 
            COALESCE(a.Mark,b.Mark) as Mark,
            COALESCE(a.Source,b.Source) as Source,
            COALESCE(a.Desert,b.Desert) as Desert
FROM Database1.dbo.Table a
FULL JOIN Database2.dbo.Table b
ON a.Mark=b.Mark
27 мар 15, 09:30    [17438422]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Веткин Сергей,

читайте про MERGE, если версия >= SQL2008
27 мар 15, 09:37    [17438458]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
То есть всего-то проблема, что поля А и В местами поменять, ежели что? Тогдаможно было бы типа
WHERE t1.Mark = t2.Mark
AND MIN(t1.A, t1.B) = MIN(t2.A,t2.B)
AND MAX(t1.A, t1.B) = MAX(t2.A,t2.B)

Но поскольку в MS SQL нет скалярной функции выбора максимума/минимума, можно построить её аналог в выражении связывания на кейсах.
-- MAX emulation
CASE
  WHEN db1.tab.A>db1.tab.B 
  THEN db1.tab.B
  ELSE db1.tab.A
END
27 мар 15, 09:55    [17438571]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
vso
Member

Откуда: СПб
Сообщений: 270
iap, это не совсем подходит, т.к. задача стоит представить пользователю разницу в разных разделах ("Изменение", "Новое", "Удаленное"), а пользователь сам будет решать менять данные или нет это раз.

А во вторых предоставлять просто в виде информации...
27 мар 15, 09:58    [17438584]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Веткин Сергей
А во вторых предоставлять просто в виде информации..

И что мешает написать в соединении несколько условий ?
27 мар 15, 09:59    [17438595]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Akina
То есть всего-то проблема, что поля А и В местами поменять, ежели что?

Если в этом проблема, то тут был интересный топик.
Исключить дубли, результаты перестановки (A-B, B-A).
27 мар 15, 10:12    [17438670]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Спасибо всем, что откликнулись на мою просьбу, но по ответам я вижу что не совсем полно сформулировал вопрос.
Приношу всем свои извинения.

Есть примерно такой набор данных в двух разных таблицах:

CREATE TABLE #T1 (
  Mark nvarchar(5) NOT NULL,
  SRC  nchar(1)    NOT NULL,
  DST  nchar(1)    NOT NULL
)


INSERT #T1 (Mark, SRC, DST)
  VALUES ('101', 'A', 'B'), ('102', 'A', 'C'), ('103', 'F', 'G'), ('105', 'K', 'U'), ('106', 'H', 'P'), ('107', 'T', 'J')


CREATE TABLE #T2 (
  Mark nvarchar(5) NOT NULL,
  SRC  nchar(1)    NOT NULL,
  DST  nchar(1)    NOT NULL
)

INSERT #T1 (Mark, SRC, DST)
  VALUES ('101', 'A', 'B'), ('102', 'C', 'A'), ('103', 'F', 'D'), ('105', 'S', 'U'), ('106', 'Z', 'N'), ('108', 'L', 'M')


SRC и DST взяты в виде одной буквы для простоты, в жизни это буквенно-числовой код, как и Mark.
сервер SQL2008 R2.

Вопрос остается тот же необходимо выявить разницу, причем из приведенных данных видно что Mark 101 и 102 - одинаковые, все же остальные притерпели изменения.
27 мар 15, 10:57    [17438957]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Веткин Сергей
прос остается тот же необходимо выявить разницу, причем из приведенных данных видно что Mark 101 и 102 - одинаковые, все же остальные притерпели изменения.

Как визуально должна выглядеть эта "выявить разницу" можно придумать самому ?
27 мар 15, 10:58    [17438973]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Glory, да, мне бы принцип уловить...
27 мар 15, 11:06    [17439041]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Веткин Сергей
да, мне бы принцип уловить...

Принцип написания в JOIN-е несколько условий что ли ?
ON (src=src and dst=dst) or (src=dst and dst=scr)
27 мар 15, 11:08    [17439048]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
o-o
Guest
то, что в t1 "отличается" от t2:
  select *
  from @t1 t1
  where not exists (select * from @t2 t2 where t1.Mark = t2.Mark and ((t1.SRC = t2.SRC and t1.DST = t2.DST) or
                                                                      (t1.SRC = t2.DST and t1.DST = t2.SRC)))
---
Mark	SRC	DST
103	F	G
105	K	U
106	H	P
107	T	J

то, что в t2 "отличается" от t1:
  select *
  from @t2 t1
  where not exists (select * from @t1 t2 where t1.Mark = t2.Mark and ((t1.SRC = t2.SRC and t1.DST = t2.DST) or
                                                                      (t1.SRC = t2.DST and t1.DST = t2.SRC)))
---
Mark	SRC	DST
103	F	D
105	S	U
106	Z	N
108	L	M
27 мар 15, 11:12    [17439087]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9156
Веткин Сергей
задача стоит представить пользователю разницу в разных разделах


В этом случае, решайте задачу средствами клиентского приложения.
27 мар 15, 13:40    [17440322]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
Владислав Колосов
решайте задачу средствами клиентского приложения.
Это же означает передачу на клиента обоих массивов данных. Что вряд ли разумно, особенно в случае, если массив большой и/или различия невелики.
27 мар 15, 14:28    [17440649]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение данных из разных таблиц  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Спасибо всем за помощь. Получилось сделать как хотел.
1 апр 15, 17:02    [17460757]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить