SQL 联合 SELECT 来自两个表,然后合并为一行

SQL Union SELECT from two tables then combine to one row

我有两个 table(测试和保留)相互引用,这是一个 1:1 关系。

一个测试的 ID 为另一个测试的 ID 保留,该 ID 在同一个 table 中,但保留在保留的 table 中以供查找。

下面是一些示例数据:

测试:

test_id | summary_id | ref
    1   |     1      | ref1
    2   |     2      | ref2

保留:

reserved_id | reserved_summary_id | reserved_for_summary_id
        1   |           1         |           2

目前我正在使用 UNION 来获取它们:

SELECT * FROM reserved r, tests t WHERE t.summary_id = r.reserved_summary_id
UNION
SELECT * FROM reserved r, tests t WHERE t.summary_id = r.reserved_for_summary_id

我有一个fiddle here

如何将该查询合并为一行?我从 SO 试过这个。但是报错。

您是否尝试 JOIN 摘要 table 两次 tests table 以便您可以访问每个 reserved_summaryreserved_for_summary ?

如果是,那么您需要:

SELECT
    r.reserved_id,
    t1.ref ref_of_reserved_summary_id,
    t2.ref ref_of_reserved_for_summary_id
FROM 
    reserved r
    INNER JOIN tests t1 ON t1.summary_id = r.reserved_summary_id
    INNER JOIN tests t2 ON t2.summary_id = r.reserved_for_summary_id

这将 return 类似于:

reserved_id | ref_of_reserved_summary_id | ref_of_reserved_for_summary_id
        1   |           ref1             |           ref2

您可以切换到 LEFT JOIN 以避免过滤掉其中一个摘要未在测试中注册的记录 table。