sql - 比较外键 - PostgreSQL

标签 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
);

同一包裹内的任何商品都必须满足 物理学的限制,出现在同一地点内 仓库。不幸的是,由于应用层的错误,一些 数据库行违反了这个约束。

stock 表中大约有 200 万行。

编写数据库查询以确定受影响的行。

现在,我明白 product_id 是一个外键,还有 stock 上的 location_idpackage_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/

相关文章:

mysql - Concat&缩写名mysql

mysql - 文本到列插入MySQL

sql - 我怎样才能让一个表 "overrides"另一个?

sql - SQL SERVER中 "&"运算符有什么用

python - Postgres 仅在表存在时选择

postgresql - 我可以在 plpgsql 中使用 nvarchar 数据类型吗?

mysql - 仅在 MySQL 中为 phpmyadmin 授予对某些列的选择访问权限

postgresql - 如何使用 PGpoint 使用 PostgreSQL 进行地理定位?

sql - 索引名称太长 attachinary/postgresql

sql - 加入日期范围内的数据