外连接一个包含选择查询结果的表

时间:2014-08-10 06:21:27

标签: mysql sql join

我想从表中已存在的时间戳添加表中不同日期的虚拟时间戳。

我知道我可以使用外部联接来完成此任务,但到目前为止我还没有成功。仍然对如何做到这一点感到困惑。这是我到目前为止所提出的

     SELECT time_stamp from tbl   
 OUTER JOIN y
 SELECT y.time_stamp =
       SELECT DISTINCT DATE_FORMAT(time_stamp, '%Y-%m-%d') FROM tbl ORDER BY DATE(time_stamp) ASC

原始表格看起来像这样

timestamp           phase_1 phase_2 phase_3
2014-03-04 12:00:00   0       0        0
2014-03-05 02:00:00   0       0        0
2014=03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0

查询的结果应该是这样的

timestamp           phase_1 phase_2 phase_3
2014-03-04 00:00:00   0       0        0
2014-03-04 12:00:00   0       0        0
2014-03-05 00:00:00   0       0        0
2014-03-05 02:00:00   0       0        0
2014=03-06 00:00:00   0       0        0
2014=03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0

我知道可以使用OUTER JOIN查询完成,但我无法弄清楚如何。也许还有一种更好的方法可以做到这一点。

2 个答案:

答案 0 :(得分:0)

 SELECT time_stamp from tbl   
 OUTER JOIN y
 SELECT y.time_stamp in(
       SELECT DISTINCT DATE_FORMAT(time_stamp, '%Y-%m-%d') FROM tbl ORDER BY DATE(time_stamp) ASC )

使用' IN'

的最佳方式之一

答案 1 :(得分:0)

您正在寻找一种方法来包含每个日期(00:00:00),除非该日期(00:00:00)已经存在。

select
        `timestamp`
      , phase_1
      , phase_2
      , phase_3
from table1

union

select
        date(`timestamp`)
      , phase_1
      , phase_2
      , phase_3
from table1

order by 
        `timestamp`

它是"截断"每个timestamp到一个日期,然后通过使用UNION删除所有重复项。

所以,从这个:

timestamp           phase_1 phase_2 phase_3
2014-03-04 12:00:00   0       0        0
2014-03-05 02:00:00   0       0        0
2014=03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0

它会产生这个

timestamp           phase_1 phase_2 phase_3
2014-03-04 00:00:00   0       0        0     --<< new
2014-03-04 12:00:00   0       0        0
2014-03-05 00:00:00   0       0        0     --<< new
2014-03-05 02:00:00   0       0        0
2014-03-06 00:00:00   0       0        0     --<< new
2014-03-06 01:00:00   0       0        0
2014-03-07 00:00:00   0       0        0

请参阅:http://sqlfiddle.com/#!9/c743a4/2