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

时间:2019-01-27 20:55:38

标签: mysql union recursive-query

我有两个表(测试表和保留表),它们相互引用,这是1:1的关系。

一个测试的ID保留给同一表中的另一个测试的ID,但作为查询保留在保留的表中。

以下是一些示例数据:

测试:

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中的这个。但是出现错误。

1 个答案:

答案 0 :(得分:1)

您是否要使用JOIN表两次对摘要表进行tests,以便您可以访问每个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

这将返回类似:

reserved_id | ref_of_reserved_summary_id | ref_of_reserved_for_summary_id
        1   |           ref1             |           ref2

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