如何基于唯一的父表键在非唯一键上还原数据?

时间:2019-01-24 15:18:05

标签: sql

我有一个已还原的行表restoredData,其中包含有关beercases的部分信息。它包含beer条码的截断版本,以及每行case的完整条码。

beersbeers_archivecasescases_archive的全部都丢失了一些数据,这是由于错误的存储过程导致负责从beers传输项目到beers_archive,情况相同。我负责从restoredData恢复丢失的项目,beer_archive是根据每天创建的文本备份创建的。

我试图用它来将一些数据恢复到我已经存在的cases表中。

这是问题所在,已还原表中的cases_archive信息已经还原到restoredData,因此我能够查看cases中的完整条形码通过将cases_archivecases合并,将case_archive上的表合并到restoredData上,并查找联接{{1 }}。这告诉我IS NULL中存在哪些不在数据库中的条形码,因此我可以插入它们。

但是,鉴于我的啤酒缩短条形码不是唯一的,所以我不能像以前那样简单地做。 restoredDatarestoredData中已经存在我的beer中的啤酒条形码,但是它们可能有两个不同的父项beer_archive,这表明它们是实际上是两个不同的瓶子。

另一则信息-cases确实有一个大小栏,指示每箱有多少个瓶子-我在想用某种方式查看箱子的大小,比如说6,但是只有4存在于casesbottles中,可以根据案例条形码在恢复的数据中查找其中的2。列出连接的瓶子少于其数量的瓶子的清单,然后以某种方式从那里去。

我的另一个想法是拿走我的bottles_archive,该瓶子有史以来制作的每一个瓶子和箱子,然后从中减去所有具有restoredDatabeer.barcode匹配的记录-仅留给我装有行列条形码但在cases.fullBarcodebeer中不存在的瓶子的行。但是,我不知道该如何用代码编写。

与表相关的列看起来像这样

beer_archive

我个人认为,以最简单的方式,仅是基于where查询,从已存在的还原数据中减去瓶子,但我也认为,一个箱子可能有两个缩短的啤酒条形码,但它们仍然相同那就错过了。

关于如何解决此问题的任何想法?

更新:

我已经能够获得所有缺少瓶子的案例的所有ID的列表。我计算了每箱加入的瓶子的数量,将其与箱子的大小进行比较,并按减法排序。在大多数情况下,缺少1瓶纪录。但是,从此ID列表中,仍然不清楚如何进行。

更新2:我已经放弃尝试仅在SQL中解决此问题。我正在使用查询来生成缺少瓶和瓶的案例,然后从那里转到python进行处理。

0 个答案:

没有答案