【发布时间】:2014-06-24 03:58:12
【问题描述】:
我有一个记录寻呼机消息的 MySQL 数据库,它有两个表,一个是包含消息的表,另一个是包含收件人的表,其中表之间的链接是 pagermessages.pcapcode = capcodes.bcapcode(数字地址每个寻呼机消息都发送到)。
这工作得很好,我通常使用内连接或左连接来显示各种寻呼机消息以及这些消息是给谁的。
我遇到的问题是系统是动态的,并且寻呼机可以重新编程,以便地址 1 可能已用于收件人示例 1,最终可能会更改为示例 2。
这导致了一个问题,即我想以历史形式存储消息,但我需要一种能够在日期范围之间指定的方法。我的想法是在 Capcodes 表中有一个日期和时间 (bStartDateTime) 和一个完成日期和时间 (bFinishDateTime),然后在我的查询中能够使用它来确定如何加入寻呼机消息。
这是我卡住的地方,我通常会做类似 SELECT * from PagerMessages INNER JOIN Capcodes ON PagerMessages.pCapcode = Capcodes.bCapcode 但是我现在想做的是做同样的事情,但是其中寻呼机消息日期 (pDateTime) 介于 bStartDateTime 和 bFinishDateTime(可能为空白)之间以进行链接,但如果不在此范围内,则不进行链接。
所以举个例子
寻呼机消息表
ID|pDateTime |pCapcode|pMessage
1 |2014-06-24 14:00|1 |This is a test message
2 |2014-06-24 15:00|1 |This is a test message
3 |2014-06-24 16:00|2 |This is a test message
Capcode 表
CapcodeID|pCapcode|Name |bStartDateTime |bFinishDateTime
1 |1 |Example 1|2014-06-24 14:00|2014-06-24 14:30
2 |1 |Example 2|2014-06-24 14:31|
3 |2 |Example 3|2014-06-24 14:31|
在上面的例子中,我想做的是加入表格,这样我就可以获得如下表格:
ID|pDateTime |pCapcode|Name |pMessage
1 |2014-06-24 14:00|1 |Example 1|This is a test message
2 |2014-06-24 15:00|1 |Example 2|This is a test message
3 |2014-06-24 16:00|2 |Example 3|This is a test message
所以你可以看到,基本上因为 capcode 在 pCapcode 表中存在两次,它采用了日期和时间之间的条目,这样我就可以在 capcode 表中有多个相同 bCapcode 的条目,然后如果它们被更改,只需在 Capcodes 表中添加更改日期,然后添加一个新条目,而不是让历史条目不再准确,因为我无法正确选择它们。
对不起,如果它没有太多意义,如果需要,我可以澄清,但我想我已经涵盖了我所问的大部分内容,这实际上是什么样的 SQL 语句可以让我执行上述操作,因为它据我所知,这不是一个简单的 INNER / LEFT JOIN。
谢谢!
【问题讨论】: