У меня есть 2 стола product_product
и product_location_stock
.
таблица product_product
не имеет никакого отношения к product_location_stock
product_location_stock
есть столбец product_id
и он связан с product_product
и моя цель - получить идентификаторы всех товаров, у которых нет product_location_stock
некоторые продукты назначены product_location_stock, а некоторые нет, поэтому в основном мне нужно получить идентификаторы тех, которых нет.
поэтому сначала я подумал, что мне нужно получить все product_id, например
SELECT id FROM product_product
и после
SELECT product_id from product_loction_stock
и, может быть, затем сравнить идентификаторы и получить идентификаторы, которые не совпадают?
и после этого я как бы застрял, так возможно ли вообще выполнить то, что я хочу?
NOT EXISTS
— это прямой перевод вашего требования в SQL:
SELECT product_product.id
FROM product_product
WHERE NOT EXISTS
(SELECT 1
FROM product_location_stock
WHERE product_location_stock.product_id = product_product.id);
Код ниже может вам помочь.
SELECT P.product_id FROM product_product P
left join product_location_stock PL ON PL.product_id =P.product_id
WHERE PL.product_id IS NULL
Недостатком является то, что это будет вычислять совпадения все, в то время как
NOT EXISTS
остановится после нахождения первого совпадения.