我有5"事件"表。它们各自具有不同的数据,但是它们共享2个相同的字段:" mission_id" " mission_tick"
我想执行单个查询来获取所有这些表中的数据WHERE mission_id = x和ORDER BY mission_tick。
我不能使用UNION,因为它们具有不同数量的列,并且有太多不能手动执行" as null"对于可能不匹配的每一列。理想情况下,我也希望避免重复列名。例如,4/5表都有"类型"列。
(SELECT * FROM events_downed WHERE mission = 12)
UNION
(SELECT * FROM events_get_in_out WHERE mission = 12)
答案 0 :(得分:0)
正如您所提到的,您不能使用UNION
,因为“它们具有不同的列数”,实际上您将无法编写查询以从具有不同列的不同表中获取数据。
最多可以使用CONCAT
或CONCAT_WS
将所有“不同”列组合在一列中,但结果将难以使用:
SELECT *
FROM (
(SELECT mission_tick, CONCAT_WS(' ', col1, col2, col3...) FROM events_downed WHERE mission = 12)
UNION
(SELECT mission_tick, CONCAT_WS(' ', col1, col2, col3...) FROM events_get_in_out WHERE mission = 12)
) as x
ORDER BY mission_tick;
理想情况下,我也希望避免重复列名。例如,4/5表都有一个“类型”列。
如果所有表都没有该列,则无法执行此操作。
在您的情况下,最佳选择最有可能编写单独的查询,每个表一个。