0

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

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

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

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

TMP_VIN_STOCK.name并且newvehicles.stocknum是每个表的库存编号列。

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

例子:

TMP_VIN_STOCK 表

- K12049
- S12040
- T12020

新车表

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

如何找出 TMP_VIN_STOCK 中没有但在 newvehicles 中的库存编号?

4

2 回答 2

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 没有拆分逗号分隔列表的功能,更不用说从逗号分隔列表中删除您应该经历的痛苦了。

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

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

于 2013-04-26T01:22:51.703 回答
0

这个问题有一些细节可以让你拆分 newvehicles 表中的值,让你用结果填充一个(临时)表,然后一个not existsnot in查询会给出你需要的结果。

或者,您可以保留前几天的 TMP_VIN_STOCK 负载(也许在表中添加一个日期字段 - 然后您可以将今天加载的内容与昨天加载的内容进行比较

于 2013-04-25T22:30:46.157 回答