SQL获取所有相关记录

时间:2020-04-22 11:26:46

标签: postgresql join

我在PostgreSQL数据库中有以下两个表:

records:
    id
    name --string

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

一个记录可以有多个相关记录,并且该关系存储在“ related_records”表中。

我正在尝试创建一个查询,当我按如下名称进行搜索时,该查询返回具有所有相关记录的结果:

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

如何扩展上面的查询以包括所有相关记录?

所需输出的示例(记录1和2相关):

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

1 个答案:

答案 0 :(得分:1)

使用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' 

查看简化的demo

相关问题