比较外键-PostgreSQL

时间:2018-12-16 15:54:33

标签: sql postgresql

我遇到了这个问题:

仓库中的库存由以下数据库表中的行表示:

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_idstock是外键,但是我对如何实现这一目标。

我想过的一件事是将包装与产品进行比较,但是我仍然坚持,因为事情是,当包装在产品上相同时,它们的位置应该相同。所以,我还没看到大图。

我对这个问题有点困惑,哈哈,关于如何处理它的任何想法?

1 个答案:

答案 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
  

不幸的是,由于应用程序层中的错误,某些数据库行违反了此约束。

不。不幸的是,该模型不正确。位置应按包装而不是库存进行引用。