结合相同的信息。将多个表中的数据列到视图的一列中

时间:2012-02-01 18:47:00

标签: mysql sql database view

我有2张桌子。

TABLE_1 ( id, date, column_1 )
TABLE_2 ( id, date, column_1, column_2 )

id和日期对于两个表都是通用的。我想把这两者结合起来。

VIEW_LATEST ( index, table_name, id, date)

在视图中,我需要一个索引来分别标识一个特定的行(不是必须的)。在那里,我将使用表名来确定从哪里获取特定行(id,date)的详细信息。并且,我只需要获取特定时期的信息(例如,上周)。

EG。

TABLE_1 ([ 1, 2012-01-27 ], [2, 2012-02-01 ])
TABLE_2 ([ 1, 2012-01-20 ], [ 2, 2012-01-31 ])
VIEW_LATEST ([ tbl_1, 2, 2012-02-01 ], [ tbl_2, 2, 2012-01-31 ], [ tbl_1, 1, 2012-01-27])

上周 - 2012-01-26至2012-02-01,因此在视图中未返回TABLE_2第一条记录。 按日期订购。

我需要完全按照上面提到的那样做。我找了一个这样的解决方案而没有找到。

高度赞赏任何实现上述方案的解决方案。此外,在将数据插入TABLE_1,TABLE_2时,期望创建一个单独的格式为VIEW_LATEST的表来插入数据,以便在需要时获取最新数据。因此,如果无法实现上述方案,那将是一个解决方案。

2 个答案:

答案 0 :(得分:2)

你可以把桌子联合起来。

对于MySQL(不允许子查询):

(SELECT 'Table_1' as tablename, id, date FROM Table_1
WHERE date BETWEEN TO_DATE('20120126', 'YYYYMMDD') AND TO_DATE('20120201', 'YYYYMMDD'))
UNION 
(SELECT 'Table_2' as tablename, id, date FROM Table_2
WHERE date BETWEEN TO_DATE('20120126', 'YYYYMMDD') AND TO_DATE('20120201', 'YYYYMMDD'))
ORDER BY tablename, id, date

结果集将是:

tablename    id    date
---------    --    -----------
Table_1       1    2012-01-27
Table_2       2    2012-01-31
Table_1       2    2012-02-01

答案 1 :(得分:1)

SELECT src_table, id, the_date
  FROM (SELECT 'TABLE_1' AS src_table, id, the_date
          FROM table_1
          WHERE the_date BETWEEN TO_DATE('2012-01-26', 'YYYY-MM-DD')
                             AND TO_DATE('2012-02-01', 'YYYY-MM-DD')
         UNION
         SELECT 'TABLE_2' AS src_table, id, the_date
           FROM table_2
           WHERE the_date BETWEEN TO_DATE('2012-01-26', 'YYYY-MM-DD')
                              AND TO_DATE('2012-02-01', 'YYYY-MM-DD')
        )
  ORDER BY the_date DESC, id, src_table

用SYSDATE-7或任何合适的

替换您的日期