используйте JOIN в случае - PullRequest
       6

используйте JOIN в случае

1 голос
/ 06 августа 2020

У меня проблема, которая очень специфична c с базой данных, которую я получил в работе. Я действительно не могу что-то изменить, и это действительно огромно, поэтому мне нужно с этим разобраться.

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

В базе данных, где товар покидает завод, мы больше не используем его ID. Когда он возвращается, мы создаем новый идентификатор и используем внешний ключ с именем «idProductParent».

Так что связать продукт с его идентификатором, когда он был на фабрике, не так уж и сложно.

Проблема в том, что если продукт покидает завод в другой раз и возвращается через несколько недель (мы занимаемся послепродажным обслуживанием), у нас не используется idProductParent, а используется idProductPrevious, который является внешним ключом для в последний раз, когда он приходил на фабрику.

Я хочу присоединиться к продукту на фабрике с его последним идентификатором. Продукт послепродажного обслуживания.

Если я присоединюсь к «idProductPrevious», если не null, или «idProductParent», если не null. У меня будет какой-то результат, но продукты, которые возвращались более одного раза, не будут отображаться.

Если у вас есть какие-то идеи или они вам нужны Подробности просто скажите это.

Спасибо.

SELECT p.idProduct as ProductFactory, pback.idProduct ProductBack
FROM PRODUCT p 
JOIN PRODUCT pback ON pback.idProductParent = p.idProduct

Этот запрос дает мне идентификатор продукта с завода и идентификатор продукта, где продукт вернулся один раз.

I Если продукт вернется в другой раз, мне нужно будет использовать этот запрос

SELECT p.idProduct as ProductFactory, pback.idProduct ProductBack, pback2.idProduct ProductBack2
FROM PRODUCT p 
LEFT JOIN PRODUCT pback ON pback.idProductParent = p.idProduct
LEFT JOIN PRODUCT pback2 ON pback2.idProductPrevious = pback.idProduct

Требуется ВЫВОД:

ProductFactory        ProductBack              ProductBack2
 1                         50                       51

Если продукт вернется в другой раз, я воспользуюсь это:

SELECT p.idProduct as ProductFactory, pback.idProduct ProductBack, pback2.idProduct ProductBack2, pback3.idProduct ProductBack3
FROM PRODUCT p 
LEFT JOIN PRODUCT pback ON pback.idProductParent = p.idProduct
LEFT JOIN PRODUCT pback2 ON pback2.idProductPrevious = pback.idProduct
LEFT JOIN PRODUCT pback3 ON pback3.idProductPrevious = pback2.idProductPrevious

Требуемый ВЫХОД:

ProductFactory        ProductBack              ProductBack2               ProductBack3
 1                         50                       51                         52

Я не уверен насчет «ЛЕВОГО», но я думаю, что вы поняли, в чем моя проблема. Я не знаю, сколько раз продукт будет возвращаться, и я не хочу использовать столько левых соединений, сколько продукт может вернуться.

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