我遇到了这个问题:
仓库内的库存由以下数据库表中的行表示:
CREATE TABLE stock (
id SERIAL,
product_id integer NOT NULL REFERENCES products ( id ),
location_id integer NOT NULL REFERENCES locations ( id ),
package_id integer REFERENCES packages ( id ),
qty integer
);
Run Code Online (Sandbox Code Playgroud)
鉴于物理限制,同一包装内的任何产品都必须出现在仓库内的同一位置。不幸的是,由于应用程序层中的错误,某些数据库行违反了此约束。
stock 表中大约有 200 万行。
编写数据库查询来识别受影响的行。
现在,我知道这product_id是一个外键,以及表上的location_id外键,但不知怎的,我对如何实现这一点感到非常困惑。package_idstock
我想过的一件事是将包装与产品进行比较,但我仍然陷入困境,因为问题是,当产品上的包装相同时,它们的位置应该相同。所以,我还没有看到大局。
我对这个问题有点了解,哈哈,关于如何处理它有什么想法吗?
该查询应该找到由(product_id, package_id)具有多个 的对标识的包location_id:
select product_id, package_id, count(distinct location_id)
from stock
group by product_id, package_id
having count(distinct location_id) > 1
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于应用程序层中的错误,某些数据库行违反了此约束。
不。不幸的是,该模型不正确。位置应按包装引用,而不是按库存引用。
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |