首先我正在使用MySQL 5.0.96。 (总是忘记提及)
我有两张桌子(TMP_VIN_STOCK
和newvehicles
)我每天都会加载TMP_VIN_STOCK
我们当前的车辆库存。
newvehicles
是我们目前在我们网站上列出的车辆。
我想在newvehicles
中找到不在TMP_VIN_STOCK
中的结果。 (所以我可以将它们从网站上删除,因为我们卖掉了它们)
TMP_VIN_STOCK.name
和newvehicles.stocknum
是每个表库存编号列。
TMP_VIN_STOCK.name
只有单个的股票编号值
newvehicles.stocknum
可以在其中以逗号分隔多个值。 (相同的车辆只有多个库存号)
示例:
- K12049
- S12040
- T12020
- S12018, S12039, S12040
- Y13068, Y13093
- T12020
如何找出TMP_VIN_STOCK中没有库存号但是在新车中的库存号?
答案 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的前几天加载(也许在表格中添加一个日期字段 - 然后你可以比较你今天加载的内容和你昨天加载的内容