У меня есть 2 таблицы (Таблица1 и Таблица2). Схемы обеих таблиц абсолютно одинаковы, и обе могут иметь дублированный набор записей, кроме идентификаторов, поскольку идентификатор генерируется автоматически.
Я хотел бы получить общий набор записей, но с идентификатором, который следует за идентификатором Таблицы1. Итак, я запрашиваю, используя Inner join. Это работает, как я ожидал.
SELECT Table1.ID, Table1.Param1, Table1.Param2, Table1.Param3
INTO #Common
FROM Table1
INNER JOIN Table2 ON Table1.Param1 = Table2.Param1
AND Table1.Param2 = Table2.Param2
AND Table1.Param3 = Table2.Param3
Однако при фактическом использовании общее количество параметров в обеих таблицах будет около 100. Таким образом, общее количество сравнений внутри предложения ON увеличится до 100.
Как выполнить внутреннее объединение, исключив один столбец вместо сравнения всех столбцов в предложении ON?
Удаление столбца ID из обеих таблиц и выполнение пересечения также невозможно, поскольку я все еще хочу извлечь идентификатор Table1 для других целей.
Я могу достичь общего 2 таблицы, удалив ID и сравнить эти 2 таблицы.
Однако это по-прежнему не отвечает моим требованиям, поскольку мне необходимо получить идентификатор Table1 для этих общих данных.
SELECT * INTO #TemporaryTable1 FROM Table1
ALTER TABLE #TemporaryTable1 DROP COLUMN ID
SELECT * INTO #TemporaryTable2 FROM Table2
ALTER TABLE #TemporaryTable2 DROP COLUMN ID
SELECT * INTO #Common FROM (SELECT * FROM #TemporaryTable1 INTERSECT SELECT * FROM #TemporaryTable2) data
SELECT * FROM #Common