我们继承了一个讨厌的数据库,其中包含一系列孤立和损坏的数据。我想把它清理干净,但我很难搞清楚如何去做,因为数据跨越几个表。基本上,我们有很多没有相关订单的交易。这些交易需要删除,因为它们没有相关的订单信息,并且导致报告问题。
表:交易
+----+
| 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 |
+----+----------------+
表:store_orders
+----------------+
| transaction_id |
+----------------+
| 10 |
| 9 |
| 8 |
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 2 |
+----------------+
所以,你会看到我们有1-10交易,我们有注册和商店订单,它们都引用了交易表。您会看到事务ID 1未在registrations
或store_orders
中表示,因此被视为孤立事务。有些交易只会进行注册。有些人只会有商店订单。有些人会同时拥有。这样做的目的是从事务表中消除在其他任何表中没有相应条目的行。
答案 0 :(得分:2)
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)
这是获取所有交易,只有那些有注册或订单的记录。然后,它会从具有注册或订单的结果中删除那些记录,只留下那些既没有注册也没有订单的记录。换句话说,只有那些在注册或store_orders中没有相应条目的交易。
使用此列表然后从事务中删除这些id。