加入多个表并将数据放在一行中。
tbl_2012-08(结构)
id | data_log | data_name
1 | 0001 | first 2 | 0002 | second
tbl_2012-09(结构)
id | data_log | data_name
1 | 0003 | third
输出:
data_log 0001 0002 0003
我如何加入这个2表,以便我可以一次提取数据
任何情况下都会有所帮助
喜欢:
创建另一个表格或其他东西
答案 0 :(得分:5)
我不知道为什么每个月都有单独的表,但您应该能够使用UNION
查询从两个表中返回数据:
select id, data_log, data_name
from `tbl_2012-08`
union all
select id, data_log, data_name
from `tbl_2012-09`
我使用UNION 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`
答案 1 :(得分: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语句必须返回相同数量的列。
答案 2 :(得分: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>