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_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
这将 return 类似于:
reserved_id | ref_of_reserved_summary_id | ref_of_reserved_for_summary_id
1 | ref1 | ref2
您可以切换到 LEFT JOIN
以避免过滤掉其中一个摘要未在测试中注册的记录 table。
我有两个 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_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
这将 return 类似于:
reserved_id | ref_of_reserved_summary_id | ref_of_reserved_for_summary_id
1 | ref1 | ref2
您可以切换到 LEFT JOIN
以避免过滤掉其中一个摘要未在测试中注册的记录 table。