我遇到了这个问题:
仓库中的库存由以下数据库表中的行表示:
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
);
考虑到 物理约束,存在于 仓库。不幸的是,由于应用程序层中的错误,一些 数据库行违反了此约束。
库存表中大约有200万行。
编写数据库查询以标识受影响的行。
现在,我知道product_id
是外键,并且location_id
表上的package_id
和stock
是外键,但是我对如何实现这一目标。
我想过的一件事是将包装与产品进行比较,但是我仍然坚持,因为事情是,当包装在产品上相同时,它们的位置应该相同。所以,我还没看到大图。
我对这个问题有点困惑,哈哈,关于如何处理它的任何想法?
答案 0 :(得分:3)
查询应找到由(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
不幸的是,由于应用程序层中的错误,某些数据库行违反了此约束。
不。不幸的是,该模型不正确。位置应按包装而不是库存进行引用。