У меня есть две таблицы рекордов, которые мне нужны, чтобы найти все совпадения.Таблицы основаны на разных идентификаторах первичного ключа, но точки данных в точности совпадают.Мне нужен быстрый запрос, который может показать мне записи, которые дублируются из первой таблицы во вторую.Вот пример того, что я пытаюсь сделать:
DECLARE @Table1 TABLE (ID INT, Value INT)
DECLARE @Table2 TABLE (ID INT, Value INT)
INSERT INTO @Table1 VALUES (1, 500)
INSERT INTO @Table1 VALUES (2, 500)
INSERT INTO @Table2 VALUES (3, 500)
INSERT INTO @Table2 VALUES (4, 500)
SELECT MAX(x.T1ID)
,MAX(x.T2ID)
FROM (
SELECT T1ID = t1.ID
,T2ID = 0
,t1.Value
FROM @Table1 t1
UNION ALL
SELECT T1ID = 0
,T2ID = t2.ID
,t2.Value
FROM @Table2 t2
) x
GROUP BY x.Value
HAVING COUNT(*) >= 2
Проблема с этим кодом состоит в том, что он возвращает запись 2 в таблице 1, сопоставленную с записью 4 в таблице 2. Мне действительно нужно вернуть запись1 в таблице 1 соотносится с записью 3 в таблице 2. Я попробовал следующее:
SELECT MIN(x.T1ID)
,MIN(x.T2ID)
FROM (
SELECT T1ID = t1.ID
,T2ID = 0
,t1.Value
FROM @Table1 t1
UNION ALL
SELECT T1ID = 0
,T2ID = t2.ID
,t2.Value
FROM @Table2 t2
) x
GROUP BY x.Value
HAVING COUNT(*) >= 2
Этот код также не работает.Возвращает 0,0.
Есть ли способ вернуть значение MIN больше 0 для обеих таблиц?