0

加入多个表并在一行中获取数据。

tbl_2012-08(结构)

编号 | 数据日志 | 数据名称
1 | 0001 | 第一的 2 | 0002 | 第二


tbl_2012-09(结构)

编号 | 数据日志 | 数据名称
1 | 0003 | 第三


输出:

数据日志
0001
0002
0003

我怎样才能加入这 2 个表,以便我可以一次提取数据。
任何情况都会有所帮助

创建另一个表或其他东西

4

3 回答 3

5

我不知道为什么您每个月都有单独的表,但您应该能够使用UNION查询从两个表中返回数据:

select id, data_log, data_name
from `tbl_2012-08`
union all
select id, data_log, data_name
from `tbl_2012-09`

我使用 aUNION ALL返回两个表中的所有行,其中包括重复项(如果有)。JOIN除非您在两个表中都有一些共同的值,并且如果您每个月都有单独的表,否则您不能使用这些表,那么我猜您在两个表中都没有共同的值。

作为旁注,我可能会包含一个列,以便您可以轻松识别数据来自哪个表:

select id, data_log, data_name, '2012-08' mth
from `tbl_2012-08`
union all
select id, data_log, data_name, '2012-09' mth
from `tbl_2012-09`

我的建议是考虑改变这个数据结构,每个月有一个单独的表将变得非常麻烦管理。

如果您只想返回data_log,那么您只需使用:

select data_log
from `tbl_2012-08`
union all
select data_log
from `tbl_2012-09`
于 2013-08-28T11:48:33.597 回答
0

你应该使用UNION ALL

SELECT id, data_log, data_name
FROM `tbl_2012-08`
UNION ALL
SELECT id, data_log, data_name
FROM`tbl_2012-09`

在这种情况下,Union 会将一个 select 语句的结果与另一个 select 语句的结果连接起来以创建一个表。重要的是要注意两个 select 语句必须返回相同数量的列。

于 2013-08-28T11:49:57.357 回答
0

你应该使用union all. 但是,您还应该包含一个标识数据来源的列。在这种情况下,我假设它是日期:

SELECT '2012-08' as YYYYMM, id, data_log, data_name
FROM `tbl_2012-08`
UNION ALL
SELECT '2012-09' as YYYYMM, id, data_log, data_name
FROM`tbl_2012-09`;

此外,如果您希望id在将它们组合在一起后使其独一无二,那么这将起作用:

select YYYYMM, (@rn := @rn + 1) as id, id as old_id, data_log, data_name
from ((SELECT '2012-08' as YYYYMM, id, data_log, data_name
       FROM `tbl_2012-08`
      ) UNION ALL
      (SELECT '2012-09' as YYYYMM, id, data_log, data_name
       FROM`tbl_2012-09`
      )
     ) t cross join
     (select @rn := 0) const;

您还可以通过执行以下操作创建另一个表:

create table new_table as
    <either of the queries above>
于 2013-08-28T11:57:29.570 回答