SQL получить все связанные записи - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть следующие две таблицы в базе данных PostgreSQL:

records:
    id
    name --string

related_records:
    id
    record_id --id of original record
    related_id --id of related record

Одна запись может иметь несколько связанных записей, и это отношение сохраняется в таблице "related_records".

I ' я пытаюсь создать запрос, который возвращает результат со всеми связанными записями, когда я ищу по имени, как это:

SELECT * FROM records
WHERE name LIKE 'Record 1';

Как я могу расширить запрос выше, чтобы включить все связанные записи?

Пример желаемого результата (записи 1 и 2 связаны):

id | name
-------------
 1 | Record 1
 2 | Record 2

1 Ответ

1 голос
/ 22 апреля 2020

С EXISTS:

WITH cte AS (SELECT * FROM records WHERE name = 'Record 1')
SELECT r.* FROM records r
WHERE r.name = (SELECT name FROM cte)
OR EXISTS (
  SELECT 1 
  FROM related_records 
  WHERE related_id = r.id 
  AND record_id = (SELECT id FROM cte) 
)

или с UNION ALL:

SELECT * 
FROM records 
WHERE name = 'Record 1'
UNION ALL
SELECT r.* 
FROM records r 
INNER JOIN related_records rr ON rr.related_id = r.id
INNER JOIN records t ON t.id = rr.record_id
WHERE t.name = 'Record 1' 

См. Упрощенную демонстрацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...