我希望创建一个Python脚本,显示商店(位置1)中不再可用但仓库(位置99)中可用的项。例如,需要补充库存的物品清单。困难在于,库存管理系统只是从数据库中完全删除项目,而不是将商店的项目计数设为0。另外,项没有唯一的ID,而是序列号的两列和具有项大小的列的组合。(PostgreSQL)数据库restock有一个表inventory如下所示:====================================================================| serialnumber | size | location | itemcount | season |--------------------------------------------------------------------| 1120.10.0369 | 140 | 99 | 8 | 74 || 1120.10.0369 | 140 | 1 | 2 | 74 || 1120.10.4011 | 170/176 | 99 | 3 | 74 || 1120.10.4011 | 170/176 | 1 | 2 | 74 || 1120.10.4011 | 86/92 | 99 | 1 | 74 || 1120.10.8006 | 158 | 99 | 1 | 74 || 1120.10.8006 | 158 | 1 | 2 | 74 |在上面的示例中,序列号为1120.10.4011且大小为86/92的项在位置99中可用(仓库),但在位置为1120.10.4011的位置没有序列号为86/92且大小为1的行,因此我希望在列表中有要重新进货的项。我试图通过使用查询的计数来显示数据中不存在的项:getresult = "SELECT serialnumber, size, location, itemcount, season, COUNT(*)" + \ "FROM inventory " + \ "WHERE season = 74" + \ "AND location != 1" + \ "GROUP BY serialnumber, size " + \ "HAVING COUNT(*) < 1"然而,这并不像预期的那样有效。问题仍然存在:如何检索数据库中缺少行的列表?或者如何检索包含行的列表,其中位置99的序列号+大小存在,但位置1不存在? 最佳答案 必须在不存在子句中使用子选择:getresult = """SELECT serialnumber, size FROM inventory i99 WHERE season = 74 AND location = 99 AND NOT EXISTS (SELECT serialnumber FROM inventory i1 WHERE i1.serialnumber = i99.serialnumber AND i1.size = i99.size AND i1.location = 1)"""这是我知道在SQL级别直接找到不存在的值的唯一方法,因为IS NULL即使在外部联接测试中,值也是原始表,而不是SELECT返回的值。关于python - 查询不在列表中的项目,在一列中没有唯一的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46663899/
10-15 18:47