Одиночный запрос SQL, который может возвращать строку со ссылкой на другую строку в той же таблице? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть таблица с именем Resources, которая может ссылаться на другую запись в той же таблице. Мне было интересно, есть ли способ выполнить запрос как к «родительской» записи, так и к «дочерней» записи с одним и тем же запросом. Я бы предпочел сделать это одним запросом без СОЮЗА. Внуков нет, а ребенок только один, 1: 1.

SELECT Id, Name, OrgId, ClassId 
FROM Resources 
WHERE OrgId = 1 AND ClassId = 2 
OR (if ResourceID is not null, then also return the row where Id = ResourceId)

Я знаю, что могу ПРИСОЕДИНЯТЬСЯ к дочерней записи, но тогда я бы удвоил количество столбцов в наборе результатов, то есть parent.Id, child.id, parent.Name, child.Name.

Может ли кто-нибудь пролить свет?

Редактировать:

Пример данных:

|   Id   |   Name   |   OrgId   |   ClassId   |  ResourceId |
|--------|----------|-----------|-------------|-------------|
|   1    |  File    |    1      |      2      |      2      |
|--------|----------|-----------|-------------|-------------|
|   2    | Picture  |    2      |      1      |      NULL   |
|--------|----------|-----------|-------------|-------------|

Есть ли запрос, который запускал бы, например, поиск c дайте мне все ресурсы, которые orgId = 1 и ClassId = 2, а затем проверьте, есть ли подключенный ресурс в ResourceId, и верните его.

1 Ответ

1 голос
/ 05 мая 2020

С EXISTS:

SELECT r.Id, r.Name, r.OrgId, r.ClassId 
FROM Resources r 
WHERE (r.OrgId = 1 AND r.ClassId = 2)
   OR EXISTS (
     SELECT 1 FROM Resources
     WHERE OrgId = 1 AND ClassId = 2 AND ResourceID = r.ID
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...