Удалить строку таблицы, ключ которой связан с другой таблицей, как внешний ключ - PullRequest
0 голосов
/ 23 марта 2019

Я только начал возиться с mysql.У меня есть три таблицы.

    PURCHASEORDERS
    PURCHASEORDERLINE(HAS A FOREIGN KEY OF PURCHASEORDERID AND STOREROOM ID)
    STOREROOM

Я пытался удалить строку из заказов покупателей и понял, что это будет проблемой, так как она связана с внешним ключом buyorderline.Теперь из моего понимания я должен был бы сказать (в псевдокоде)

    delete from purchaseorders where purchaseid not exists in 
    purchaseorderline.purchaseid

Любое предложение о том, как я могу выразить это в терминах mysql?

Ответы [ 2 ]

2 голосов
/ 23 марта 2019

Вы, похоже, хотите подзапрос not exists:

delete from purchaseorders po
    where not exists (select 1
                      from purchaseorderline pol
                      where po.purchaseid = ol.purchaseid
                     );

Эквивалентная формулировка: left join:

delete po
    from purchaseorders po left join
         purchaseorderline pol
         on po.purchaseid = ol.purchaseid
    where pol.purchaseid is null;

Я настоятельно не рекомендую вам использовать NOT IN с подзапросом. Он не работает должным образом, если любые значения в подзапросе возвращают NULL. Поскольку есть другие способы выразить предполагаемую логику, я рекомендую привыкнуть использовать эти другие способы, чтобы избежать будущих ошибок.

2 голосов
/ 23 марта 2019

Просто используйте не в

  delete from purchaseorders where purchaseid not in 
  ( select   purchaseorderline.purchaseid from purchaseorderline where 
        purchaseid  is not null
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...