MySQL:在多个表中获取孤儿
我们继承了一个糟糕的数据库,其中包含大量孤立和损坏的数据。我想把它清理干净,但我很难弄清楚到底该怎么做,因为数据跨越多个表。基本上,我们有很多没有关联订单的交易。需要删除这些交易记录,因为它们没有相关的订单信息,并且会导致报告问题 表格:交易MySQL:在多个表中获取孤儿,mysql,Mysql,我们继承了一个糟糕的数据库,其中包含大量孤立和损坏的数据。我想把它清理干净,但我很难弄清楚到底该怎么做,因为数据跨越多个表。基本上,我们有很多没有关联订单的交易。需要删除这些交易记录,因为它们没有相关的订单信息,并且会导致报告问题 表格:交易 +----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----+ +----+----------------+ | id
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----+
+----+----------------+
| id | transaction_id |
+----+----------------+
| 1 | 10 |
| 2 | 9 |
| 3 | 8 |
| 4 | 7 |
| 5 | 6 |
| 6 | 5 |
| 7 | 4 |
| 8 | 3 |
| 9 | 2 |
| 10 | 2 |
+----+----------------+
+----------------+
| transaction_id |
+----------------+
| 10 |
| 9 |
| 8 |
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 2 |
+----------------+
表格:注册人数
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----+
+----+----------------+
| id | transaction_id |
+----+----------------+
| 1 | 10 |
| 2 | 9 |
| 3 | 8 |
| 4 | 7 |
| 5 | 6 |
| 6 | 5 |
| 7 | 4 |
| 8 | 3 |
| 9 | 2 |
| 10 | 2 |
+----+----------------+
+----------------+
| transaction_id |
+----------------+
| 10 |
| 9 |
| 8 |
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 2 |
+----------------+
表格:商店订单
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----+
+----+----------------+
| id | transaction_id |
+----+----------------+
| 1 | 10 |
| 2 | 9 |
| 3 | 8 |
| 4 | 7 |
| 5 | 6 |
| 6 | 5 |
| 7 | 4 |
| 8 | 3 |
| 9 | 2 |
| 10 | 2 |
+----+----------------+
+----------------+
| transaction_id |
+----------------+
| 10 |
| 9 |
| 8 |
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 2 |
+----------------+
您将看到,我们有事务1-10,我们有注册和存储订单,它们都引用了事务表。您可以看到,事务ID 1在注册
或存储订单
中都没有表示,因此被视为孤立事务。某些交易将只进行注册。有些人只有商店订单。有些人两者兼得。这样做的目的是从事务表中删除在其他任何一个表中都没有相应项的行
Delete from transactions where transaction_ID IN (
Select ID
from transactions T
LEFT JOIN registrations R on T.ID = R.Transaction_ID
LEFT JOIN store_orders SO on T.ID = SO.Transaction_ID
WHERE T.Transaction_ID is null and SO.Transaction_ID is null)
- 您只需运行()之间的部分,查看它将清除哪些记录
- 你可以抽查这些结果,以确认它将实现你的预期
- 然后你就可以处理整个事情了
然后使用此列表将这些id从事务中删除 你在问我们密码吗?他在寻求帮助。显然,如果他知道任何基本的sql,他就不会花时间问这样一个写得很好、格式很好的问题。是的,我在寻求帮助。使用这个软件已经有好几个月的时间了,令人沮丧,我已经到了一个地步,由于对这个程序的失望,我再也不能取得任何进展了。