我有两个表(测试表和保留表),它们相互引用,这是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中的这个。但是出现错误。
答案 0 :(得分:1)
您是否要使用JOIN
表两次对摘要表进行tests
,以便您可以访问每个reserved_summary
和reserved_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
,以避免过滤掉未在测试表中注册其中一个摘要的记录。