Mysql 从日期和历史记录中获取正确的数据

Mysql 从日期和历史记录中获取正确的数据,mysql,Mysql,我有一个数据库,其中包括如下表: 我的目标是从Place或PlaceUpdateHistory获取信息,这取决于control\u date字段。如果是PlaceUpdateHistory,我需要与control\u date对应的好版本。换句话说,我想要这样的东西: IF control_date > last update_date THEN SELECT * FROM Place ELSE SELECT * FROM PlaceUpdateHistory WHERE first o

我有一个数据库,其中包括如下表:

我的目标是从
Place
PlaceUpdateHistory
获取信息,这取决于
control\u date
字段。如果是
PlaceUpdateHistory
,我需要与
control\u date
对应的好版本。换句话说,我想要这样的东西:

IF control_date > last update_date
THEN SELECT * FROM Place
ELSE SELECT * FROM PlaceUpdateHistory WHERE first of control_date > update_date
我更喜欢完整SQL的解决方案

下面是一个执行示例:

我认为更新表和控制表之间应该有一个关系,因为这里没有,所以逻辑变得有点复杂

根据您的要求,您可以创建另一个包含以下内容的表:

  • PlaceHistoryUpdate元素的id
  • 与该更新记录关联的控件元素的id
另一件事是,你不需要像Place这样的实体,如果你把所有的Place记录保存在PlaceUpdateRecords中,这会使你的工作更容易,这在逻辑上也是正确的


然后就有PlaceUpdateRecords、Control和UpdateRecord\u控制实体。通过这种方式,查询变得更加容易,并且在逻辑上也是正确的。

我认为更新表和控制表之间应该有一种关系,因为这里没有,所以逻辑变得有点复杂

根据您的要求,您可以创建另一个包含以下内容的表:

  • PlaceHistoryUpdate元素的id
  • 与该更新记录关联的控件元素的id
另一件事是,你不需要像Place这样的实体,如果你把所有的Place记录保存在PlaceUpdateRecords中,这会使你的工作更容易,这在逻辑上也是正确的


然后就有PlaceUpdateRecords、Control和UpdateRecord\u控制实体。通过这种方式,查询变得更加容易,并且逻辑上仍然正确。

请提供一些示例数据和所需结果不确定我是否正确理解了您的观点,但我认为您可以通过更改ER图来解决这个问题,此实体关系集不符合您的要求。请提供一些示例数据和所需结果不确定我是否正确理解您的观点,但我认为您可以通过更改ER图表来解决此问题,此实体关系集不符合您的要求。您是对的,我的操作太复杂了。我刚刚更改了填充PlaceUpdateHistory的触发器,以填充新值。同样,我只需要查询表PlaceUpdateHistory就可以了。谢谢你给我另一个观点。欢迎你,如果你决定使用table UpdateRecord_控件,还有一个进一步的优化,即如果PlaceUpdateHistory和Control表之间有一对一的关系(基数),那么就不需要单独的表来保持这两个表之间的关系。而是在PlaceUpdateHistory的每一行中保留相应的控件id。这样可以减少冗余。你是对的,我的操作太复杂了。我刚刚更改了填充PlaceUpdateHistory的触发器,以填充新值。同样,我只需要查询表PlaceUpdateHistory就可以了。谢谢你给我另一个观点。欢迎你,如果你决定使用table UpdateRecord_控件,还有一个进一步的优化,即如果PlaceUpdateHistory和Control表之间有一对一的关系(基数),那么就不需要单独的表来保持这两个表之间的关系。而是在PlaceUpdateHistory的每一行中保留相应的控件id。这样可以减少冗余。