我在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
答案 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。