Сравните внешние ключи - PostgreSQL - PullRequest
0 голосов
/ 16 декабря 2018

У меня возникла эта проблема:

Запас на складе представлен строками в следующей таблице базы данных:

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

Любые продукты, входящие в одну и ту же упаковку, должны,учитывая физические ограничения, присутствовать в том же месте на складе.К сожалению, из-за ошибок на уровне приложения некоторые строки базы данных нарушают это ограничение.

В таблице запасов содержится приблизительно два миллиона строк.

Напишите запрос к базе данных, чтобы определить затронутые строки.

Теперь я понимаю, что product_id является внешним ключом, а также location_id и package_id в таблице stock, но почему-то я очень запутался в том, как этого добиться.

Одна вещь, о которой я подумал, - это сравнить пакеты с продуктами, но я все еще застрял, потому что дело в том, что когда упаковка совпадает с товаром, их местоположение должно быть одинаковым.Итак, я пока не вижу общую картину.

Я немного утончен, лол, есть идеи о том, как к ней подойти?

1 Ответ

0 голосов
/ 16 декабря 2018

Запрос должен найти пакеты, идентифицированные парами (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

К сожалению, из-за ошибок на уровне приложения некоторые строки базы данных нарушают это ограничение.

Нет.К сожалению, модель неверна.На местоположения должны ссылаться пакеты, а не акции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...