This query should do it:
SELECT child.child_product_id
FROM products_m_products child
JOIN product c_prod ON c_prod.id = child.child_product_id
WHERE child.parent_product_id = 1337 -- user input here
AND c_prod.status = 'ACTIVE'
AND NOT EXISTS (
SELECT
FROM products_m_products parent
JOIN product p_prod ON p_prod.id = parent.parent_product_id
WHERE parent.child_product_id = child.child_product_id
AND p_prod.status = 'ACTIVE'
AND parent.parent_product_id <> 1337 -- same user input
);
The anti-semi-join with NOT EXISTS
filtersonly keeps children that havewith no other active parent than the given A. This query does not care whether the given parent A
is active itself.
Should be as fast as possible.
There are several basic techniques to check there is no related row in another table:
Related answer using a LEFT JOIN
: