2013-10-01 74 views
2

修改datetime列我有一個粗略的時間搞清楚如何標題這一點,但這裏有一個解釋......MySQL的 - 基於額外datetime列

我有兩個表

表1:

-------------------------------------------------------------- 
| id |  start  |   end   | duration | 
------------------------------------------------------------- 
| 1 | 2013-10-01 09:00:00 | 2013-10-01 09:30:00 | 30 | 
------------------------------------------------------------- 
| 2 | 2013-10-02 10:00:00 | 2013-10-02 10:30:00 | 30 | 
-------------------------------------------------------------- 
| int |  datetime  |  datetime  | int | 
-------------------------------------------------------------- 

表#2:

--------------------------------------------------- 
| id |  start  |   end   | 
--------------------------------------------------- 
| 3 | 2013-10-01 09:00:00 | 2013-10-01 17:00:00 | 
--------------------------------------------------- 
| 4 | 2013-10-02 09:00:00 | 2013-10-02 17:00:00 | 
--------------------------------------------------- 
| int |  datetime  |  datetime  | 
--------------------------------------------------- 

我想要做的就是抓住從表#中的所有記錄2匹配任何表#1行落在在相同日期和相同的日期時間內和修改結果通過從表#1去除倍設定...

一個例子的結果將是...

--------------------------------------------------------- 
| table2id |  start  |   end   | 
--------------------------------------------------------- 
|  3  | 2013-10-01 09:30:00 | 2013-10-01 17:00:00 | 
--------------------------------------------------------- 
|  4  | 2013-10-02 09:00:00 | 2013-10-02 10:00:00 | 
--------------------------------------------------------- 
|  4  | 2013-10-02 10:30:00 | 2013-10-02 17:00:00 | 
--------------------------------------------------------- 

這是如何實現的?

+0

什麼聯繫表格#1行到表#2行?是開始時間嗎? –

+0

如果'table#1'包含同一個'table#2'日期的幾個時間間隔? –

+0

我修改了我的問題,使其更加清晰,在我的實際數據庫中還有另一個將表連接在一起的fk(只是一個int列),除此之外沒有其他任何東西將它們連接在一起。 –

回答

0

雖然我不能肯定這邏輯是正確的,這樣的事情可能會接近你要找的內容:

UPDATE tbl2 
SET start = (SELECT end FROM tbl1 WHERE start = tbl2.start) 

這並不十分清楚這兩個表是如何關聯。但是,id顯然沒有。在您的示例中唯一匹配的兩個值是start值。

0
SELECT Table2.id, Table1.end_date , Table2.end_date 
FROM table1 AS Table1, table2 AS Table2 
WHERE 
    Table1.start_date >= Table2.start_date 
    AND Table1.end_date <= Table2.end_date 
UNION 
SELECT Table2.id, Table2.start_date , Table1.start_date 
FROM table1 AS Table1, table2 AS Table2 
WHERE 
    Table1.start_date >= Table2.start_date 
    AND Table1.end_date <= Table2.end_date 

這個工作,但會給你相同start,並且您有end一個額外的記錄手動刪除

--------------------------------------------------------- 
| table2id |  start  |   end   | 
--------------------------------------------------------- 
|  3  | 2013-10-01 09:30:00 | 2013-10-01 17:00:00 | 
|  4  | 2013-10-02 10:30:00 | 2013-10-02 17:00:00 | 
|  3  | 2013-10-01 09:00:00 | 2013-10-01 09:00:00 | --> Extra Record 
|  4  | 2013-10-02 09:00:00 | 2013-10-02 10:00:00 |