从多个mysql表中选择所有共享相同索引但不共享数据结构的数据

时间:2017-03-12 18:33:07

标签: mysql

我有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)

1 个答案:

答案 0 :(得分:0)

正如您所提到的,您不能使用UNION,因为“它们具有不同的列数”,实际上您将无法编写查询以从具有不同列的不同表中获取数据。

最多可以使用CONCATCONCAT_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表都有一个“类型”列。

如果所有表都没有该列,则无法执行此操作。

在您的情况下,最佳选择最有可能编写单独的查询,每个表一个。