根据另一个表的数据删除逗号分隔字段中的条目

时间:2013-04-25 22:04:14

标签: mysql join

首先我正在使用MySQL 5.0.96。 (总是忘记提及)

我有两张桌子(TMP_VIN_STOCKnewvehicles)我每天都会加载TMP_VIN_STOCK我们当前的车辆库存。

newvehicles是我们目前在我们网站上列出的车辆。

我想在newvehicles中找到不在TMP_VIN_STOCK中的结果。 (所以我可以将它们从网站上删除,因为我们卖掉了它们)

TMP_VIN_STOCK.namenewvehicles.stocknum是每个表库存编号列。

TMP_VIN_STOCK.name只有单个的股票编号值 newvehicles.stocknum可以在其中以逗号分隔多个值。 (相同的车辆只有多个库存号)

示例:

TMP_VIN_STOCK表

- K12049
- S12040
- T12020

newvehicles表

- S12018, S12039, S12040
- Y13068, Y13093
- T12020

如何找出TMP_VIN_STOCK中没有库存号但是在新车中的库存号?

2 个答案:

答案 0 :(得分:1)

您的问题很好地说明了为什么关系数据库中的表应该规范化。

如果你想保留这个设计,你必须做这样的事情:

loop over the newvehicles rows:
    loop over the items in the comma separated field
        check if the item does not exist in TMP_VIN_STOCK

更不用说mysql没有分割逗号分隔列表的功能了 更不用说你应该去除从逗号分隔列表中找到的那些痛苦。

您绝对应该重新设计数据库。有一个车辆数据表和另一个库存数据表,并用外键链接。这样你就不必经历所有这些痛苦。您可以使用简单查询检索所需的数据。

此外,如果某个条目不在该股票中,则不应删除其数据,但该计数应为零,或者应将其标记为缺货。

答案 1 :(得分:0)

这个question有一些细节可以让你拆分newvehicles表中的值,然后让你用({1}}或not exists查询给出的结果填充(temp)表你需要的结果。

或者你可以保留TMP_VIN_STOCK的前几天加载(也许在表格中添加一个日期字段 - 然后你可以比较你今天加载的内容和你昨天加载的内容