У меня есть две таблицы записей, которые мне нужны, чтобы найти все совпадения. Таблицы основаны на разных идентификаторах первичного ключа, но точки данных точно такие же. Мне нужен быстрый запрос, который может показать мне записи, которые дублируются от первой таблицы до второй. Вот пример того, что я пытаюсь сделать:SQL GROUP BY HAVING issue
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 для обеих таблиц?
Не меняя много, я думаю, вы могли бы просто заменить '0' заполнители 'NULL' заполнителей (' T2ID = NULL', 'T1ID = NULL'). –