Исключая соответствия на Объединяющих полях, которые являются ПУСТЫМИ

Если Вы делаете соединение, которое похоже на это

SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2

Есть ли способ не позволить, АННУЛИРУЕТ для соответствия подобный результатам, которые возвратил бы этот запрос

SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
               AND T1.KeyField2 IS NOT NULL AND T2.KeyField2 IS NOT NULL

Править

Я на самом деле задал вопрос неправильно.... Позвольте мне попробовать еще раз.

Мы сравниваем новые данные со старыми данными и ищем записи, где строки являются точно тем же.

Таким образом, обе таблицы определили:

CREATE TABLE [Table](
    [Identifier] [int] IDENTITY(1,1) NOT NULL,
    [Key1] [varchar](50) NOT NULL,
    [Data1] [varchar](50) NULL,
    [Data2] [varchar](50) NULL

Если я делаю запрос:

DELETE
FROM T1 JOIN T2 ON T1.Key1 = T2.Key1 
               AND T1.Data1 = T2.Data2 AND T1.Data2 = T2.Data2

Дать

T1 & T2

| Key1 | Data1       | Data2   |
| 1000 | 123 Main St | <NULL>  |
| 1001 | 456 High St | FLOOR 2 |

Это не удалило бы дублирующиеся рекордные 1000 из T1, так как Data2 является ПУСТЫМ.

За пределами использования волшебного значения в соединении, там какой-либо другой способ сравнить их?

Я понимаю, что должен заставить консультантов переписать код для вставки всех, АННУЛИРУЕТ как'', но это - огромное обязательство в этой точке. Я также смотрю на хеширование строки для поиска различий.

6
задан Wayne Arthurton 19 October 2010 в 20:48
поделиться