Когато използвате WHERE
условие в таблицата от дясната страна на LEFT JOIN
(Външно съединяване), то на практика се превръща във INNER JOIN
, защото WHERE
клаузата трябва да отговаря на условията. Ето защо получавате само случаи, когато c.active = 1
.
Трябва да преместите WHERE
условие за LEFT JOIN .. ON .. AND ..
състояние:
SELECT
p.id, c.id as category_id
FROM
(SELECT id FROM products p WHERE p.id > 6319055 ORDER BY id LIMIT 1000) prods
LEFT JOIN
products p ON p.id = prods.id
LEFT JOIN
categories c ON c.id = p.category_id
AND c.active = 1