David_Wimbley
Поэтому я думаю, что вам нужно изменить свою схему, так что этот запрос-не самый идеальный способ сделать это, я уверен. Я могу придумать способ сделать это, зацикливаясь на каждой строке и сохраняя результаты, которые также будут медленнее, чем это.
В основном он использует соединение и подзапрос, чтобы получить совпадающие результаты column1 + column2.
Я получаю те же результаты, что и исходный вопрос OP, но я не получаю тех же результатов, которые указаны в комментарии к моему вопросу. Вручную делая отношения, я не вижу, как 18 может быть возможным совпадением, например.
DECLARE @Relationship TABLE (
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Column1 INT NULL,
Column2 INT NULL
);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (6,16);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (6,20);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (6,2);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (6,23);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (8,24);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (8,4);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (8,21);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (8,2);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (8,16);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (8,1);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (13,21);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (13,22);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (13,23);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (13,16);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (13,2);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (13,18);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (15,2);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (15,16);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (15,24);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (15,4);
INSERT INTO @Relationship ( Column1, Column2 ) VALUES (16,35);
DECLARE @Input INT = 6
SELECT DISTINCT A.Column2 AS Result1 FROM @Relationship AS A
LEFT OUTER JOIN @Relationship AS B ON B.Column1 = A.Column2
WHERE A.Column1 = @Input
UNION ALL
SELECT DISTINCT A.Column1 AS Result1 FROM @Relationship AS A
WHERE A.Column2 IN (SELECT DISTINCT A.Column2 FROM @Relationship AS A
LEFT OUTER JOIN @Relationship AS B ON B.Column1 = A.Column2
WHERE A.Column1 = @Input ) AND A.Column1 <> @Input
Вышеизложенное дает мне вывод
Цитата:
2
16
20
23
8
13
15
Member 3521466
Привет Дэвид,
Большое спасибо, что потратили на это свое время. Кажется, я перепутал вас со значениями в колонке 1 и колонке 2.
Значения в этих двух столбцах - это два разных значения. С " О " я бы заменил на значения столбца 2 с алфавитами.
Столбец1 Столбец2
6 Р
6 т
6 Б
6 Вт
8 X
8 D
8 U
8 Б
8 р
8 а
10 Q
11 Q
13 U
13 в
13 Вт
13 Р
13 Б
13 Р
15 б
15 р
15 X
15 D
16 Z
Когда вход равен 6, я сначала получаю все значения отображения из столбца 2, которые являются P, T, B, W.
Теперь мне нужно снова посмотреть в таблице отображения для P, T,B, W, и я получу отображение s для этих значений в столбце 1 Как
П карты 6,8,13,15
T сопоставляется с 6
B карты до 6,8,13,15
W карты до 6,13
Все вместе это будет 6,8,13,15.
Отображения для этих значений в Col 2 являются A, B,D, P, R, T, U,V, W, X. Теперь следует выяснить сопоставления для этих значений Col2
А - > 8
Б -&ГТ;6,8,13,15
D - > 8,15
П -&ГТ;6,8,13,15
R - > 13
T - > 6
У-&ГТ; 8,13
V - > 13
Ж -&ГТ;6,13
Х -&ГТ;8,13,15
Таким образом, все вместе это были бы значения col1 6,8,13,15, для которых мы уже выяснили отображения в Col2.
Таким образом,конечным результатом будут значения Col2 A,B,D,P,R,T,U,V,W, X для входного значения Col1 6.
Если входное значение Col1 равно 16, то выходным будет результирующее значение Col2 Z, так как оно не имеет других отображений.
Если SQL-запрос будет трудным, то C# также можно использовать вместе с sql. Спасибо снова.