Все записи одной и той же таблицы связаны с полем, но запрашиваются другим полем - sqlserver - PullRequest
0 голосов
/ 14 июня 2019

БД: SQLSERVER у меня есть эта таблица:

id-description-code
1 -fdsdfsf     -A
2 -ghggh       -A
3 -tytytyty    -B
4 -hjhjydx     -A

Мне нужен запрос, который «фильтруя по одному идентификатору» (например, «2») возвращает мне все записи одной и той же таблицы, связанные по «коду»

ищите id = 2 результат должен быть:

1 -fdsdfsf     -A
2 -ghggh       -A
4 -hjhjydx     -A

я написал эти два запроса, которые работают:

SELECT * FROM TABLE S2 INNER JOIN
(select * from TABLE 
  WHERE ID=2) S1
  ON S1.CODE=S2.CODE


SELECT * FROM TABLE S2
WHERE S2.CODE IN (SELECT CODE FROM  TABLE S1 WHERE  ID =2)

Не могли бы вы дать мне другой пример запроса (с другими операторами, например, CROSS APPLY, EXIST или другие), чтобы получить тот же результат

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Это кажется странным запросом, просто ищущим возможные способы возврата той же информации. Но вы, кажется, пропустили самый простой способ. Обратите внимание, как я публикую расходные данные, чтобы другие могли просто написать запрос? Вы должны сделать это в будущем.

declare @Something table
(
    ID int
    , description varchar(20)
    , CODE char(1)
)

insert @Something values
(1, 'fdsdfsf', 'A')
,(2, 'ghggh', 'A')
,(3, 'tytytyty', 'B')
,(4, 'hjhjydx', 'A')


select *
from @Something s
join @Something s2 on s2.CODE = s.CODE
where s.ID = 2

Или используя CROSS APPLY

select *
from @Something s
cross apply (select * from @Something s2 where s2.CODE = s.CODE) x
where s.ID = 2
0 голосов
/ 14 июня 2019

Зачем делать это сложнее, чем нужно?

select * from sometable where code = 
(select code from sometable where id=2)
...