我遇到了这个问题:
仓库中的库存由以下数据库表中的行表示:
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
);
同一包裹内的任何商品都必须满足 物理学的限制,出现在同一地点内 仓库。不幸的是,由于应用层的错误,一些 数据库行违反了这个约束。
stock 表中大约有 200 万行。
编写数据库查询以确定受影响的行。
现在,我明白 product_id
是一个外键,还有 stock
上的 location_id
和 package_id
表,但不知何故我对如何实现这一点感到非常困惑。
我想到的一件事是将包装与产品进行比较,但我仍然卡住了,因为事实是,当产品上的包装相同时,它们的位置也应该相同。所以,我还没有看到全局。
我对这个问题不太了解,大声笑,关于如何处理它有什么想法吗?
最佳答案
查询应该找到由具有多个 location_id
的 (product_id, package_id)
对标识的包:
select product_id, package_id, count(distinct location_id)
from stock
group by product_id, package_id
having count(distinct location_id) > 1
Unfortunately, due to bugs in the application layer, some database rows violate this constraint.
没有。不幸的是,模型不正确。位置应按包裹而非库存引用。
关于sql - 比较外键 - PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53803868/