Предполагая, что Вы знаете, как предоставить номер строки своим строкам (например, ROW_NUMBER () в SQL Server), Вы можете создать таблицу поиска (соответствия) и присоединиться к ней. См. Объяснение ниже:
LookupTable:
RowNum Value
1 A
2 B
3 C
Ваша исходная таблица SourceTable (при условии, что вы уже добавили в нее RowNum - на случай, если вы этого не сделали, просто введите для нее подзапрос (или CTE для SQL Server 2005 или новее):
RowNum Name
-----------
1 A
2 B
3 C
4 D
Теперь вам нужно внутреннее соединение LookupTable с вашей SourceTable на LookupTable.RowNum = SourceTable.RowNum AND LookupTable.Name = SourceTable.Name
. Затем выполните левое объединение этого результата с LookupTable только для RowNum. Если в конечном результате LookupTable.RowNum IS NULL
, то Вы знаете, что не найдено ни одного полного совпадения хотя бы в одной строке.
Вот код для объединения:
SELECT T.*, LT2.RowNum AS Matched
FROM LookupTable LT2
LEFT JOIN
(
SELECT ST.*
FROM SourceTable ST
INNER JOIN LookupTable LT ON LT.RowNum = ST.RowNum AND LT.Name = ST.Name
) T
ON LT2.RowNum = T.RowNum
Набор результатов вышеупомянутого запроса будет содержать строки с Matched IS NULL
, если строка не соответствует условию из таблицы LookupTable.