Я объединяю две таблицы (я буду называть их таблицами Table1 и Table3). Значение ключа из таблицы 1 (допустим, CompareValue1) используется в таблице 3 (хотя и под другим именем CompareValue2).
С моей структурой базы данных compareValue1 не обязательно должен совпадать с CompareValue2.
Я хочу написать запрос Select, который принимает CompareValue1, просматривает Table2 и показывает мне DataPoints, где CompareValue1! = CompareValue2.
Запросы, которые я пробовал до сих пор, не собирают все, что мне нужно. Для данной DataPoint compareValue1! = CompareValue2, поэтому, когда я ищу это простое отношение, мой запрос исключает только случаи, когда CompareValue1 = compareValue2.
Надеюсь, это имеет смысл, извините, если мое объяснение недостаточно техническое / запутанное.
Обновление: я воссоздал некоторые данные, которые лучше иллюстрируют проблему (и удалил старую упрощенную версию). Запрос Мэтью, кажется, не сделал именно то, что я ищу. Кроме того, я упростил свой оригинальный запрос. В действительности мне нужно соединить table1 с table2, чтобы я мог соединить table3 и сравнить значение из table1 в table3.
DECLARE @table1 as TABLE (Key1 INT, compareValue1 INT)
DECLARE @table2 as TABLE (Key1 INT, Key2 varchar(5), compareValue1 INT, compareValue2 INT)
DECLARE @table3 as TABLE (Key2 varchar(5), compareValue2 INT)
INSERT INTO @table1 (Key1, compareValue1)
VALUES (1, 1)
, (1, 5)
, (2, 7)
, (3, 10)
INSERT INTO @table2 (Key1, Key2, compareValue1, compareValue2)
VALUES (1, 'a', 1, 1)
, (1, 'a', 1, 3)
, (1, 'a', 1, 12)
, (1, 'a', 5, NULL)
, (1, 'a', 5, 7)
, (1, 'b', 5, 3)
, (2, 'b', 7, 7)
, (2, 'b', 7, 2)
, (2, 'h', 7, 7)
, (3, 'c', 10, 3)
, (3, 'c', 10, NULL)
, (3, 'd', 10, 6)
, (3, 'b', 10, 11)
INSERT INTO @table3 (Key2, compareValue2)
VALUES ('a', 1)
, ('a', 3)
, ('a', 12)
, ('a', NULL)
, ('a', 7)
, ('b', 3)
, ('b', 7)
, ('b', 2)
, ('h', 7)
, ('c', 3)
, ('c', NULL)
, ('d', 6)
, ('b', 11)
SELECT *
FROM @table2 T2
LEFT OUTER JOIN @table1 T1
ON T1.Key1 = T2.Key1
LEFT OUTER JOIN @table3 T3
ON T3.Key2 = T2.Key2
Фильтрация необходимых объединений - вот где я сталкиваюсь с проблемами. В моем операторе Select в таблице 2 я хотел бы видеть следующие точки данных.
(1, 'a', 5, NULL)
(1, 'a', 5, 7)
(1, 'b', 5, 3)
(3, 'c', 10, 3)
(3, 'c', 10, NULL)
(3, 'd', 10, 6)
(3, 'b', 10, 11)
Что у них всех общего? Взятый как группа, основанная на данных таблицы1 ([1,5] и [3,10]), CompareValue1 никогда не равняется CompareValue2.
(1, 'a', 1, 1)
(2, 'b', 7, 7)
(2, 'h', 7, 7)
В этом смысле приведенные выше значения не позволят данным таблицы1 ([1,1] и [2,7]) появиться в результатах моего запроса, поскольку существуют точки, где compareValue1 = compareValue2 ДАЖЕ ЧЕРЕЗ, что не всегда верно. И.Е. (1, «а», 1, 3).
Спасибо, что нашли время подумать.