У меня есть 2 таблицы (Таблица1 и Таблица2). Схема обеих таблиц абсолютно одинакова, и обе могут иметь дублированный набор записей, кроме идентификаторов, поскольку идентификатор генерируется автоматически.
Я хотел бы получить общий набор записей, но с идентификатором, который следует за идентификатором таблицы 1. Итак, я запрашиваю, используя внутреннее соединение. Он работает так, как я ожидал.
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?
Удаление столбца идентификатора из обеих таблиц и выполнение пересечения также невозможно, поскольку я все еще хочу извлечь идентификатор таблицы 1 для другой цели. Я могу добиться общего из 2 таблиц, удалив идентификатор и сравнив эти 2 таблицы. Однако это по-прежнему не соответствует моему требованию, поскольку мне нужно получить идентификатор таблицы 1 для этих общих данных.
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
int
? Если да, то подумали ли вы о том, правильную ли структуру данных вы выбрали для начала? Узкая таблица сID, ParamNumber, ParamValue
может быть намного проще для работы в долгосрочной перспективе. - person Damien_The_Unbeliever   schedule 18.01.2019