首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL -根据其他datetime列修改datetime列

MySQL -根据其他datetime列修改datetime列
EN

Stack Overflow用户
提问于 2013-10-01 20:21:48
回答 2查看 57关注 0票数 2

我花了很长时间才弄清楚如何命名,但这里有一个解释……

我有两张桌子

表#1:

代码语言:javascript
运行
复制
--------------------------------------------------------------
| 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:

代码语言:javascript
运行
复制
---------------------------------------------------
| 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中的时间来修改结果集……

一个示例结果是...

代码语言:javascript
运行
复制
---------------------------------------------------------
| 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 |
---------------------------------------------------------

如何才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2013-10-01 20:24:26

虽然我不能确定这个逻辑是否正确,但像这样的东西可能接近你正在寻找的东西:

代码语言:javascript
运行
复制
UPDATE tbl2
SET start = (SELECT end FROM tbl1 WHERE start = tbl2.start)

这两个表是如何关联的还不是很清楚。然而,id 显然不是。在您的示例中,唯一匹配的两个值是start值。

票数 0
EN

Stack Overflow用户

发布于 2013-10-01 21:24:37

代码语言:javascript
运行
复制
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

这是可行的,但会为您提供一个具有相同startend的额外记录,您必须手动删除这些记录

代码语言:javascript
运行
复制
---------------------------------------------------------
| 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 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19116047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档