MySQL select 带有子查询和 LIMIT

MySQL select with sub-query and LIMIT

我正在使用 subselect 来获取我需要的行 ID,如下所示:

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) 
WHERE
   c.active = 1

ID 6319055 是我最后一个 selected ID。我在 select 处理数据后保存它。

现在我遇到的问题是我在每个周期 select 处理 1000 行,有时我 select 1000 行不符合

WHERE c.active = 1

要求。 Select returns 什么都没有,我没有任何行 ID 来继续子 select。

有什么办法可以解决这个问题吗?如何获取子 select 的最后一个 ID,即使它不符合 WHERE 子句?

当您在 LEFT JOIN(外部联接)的右侧 table 使用 WHERE 条件时,它实际上变成了 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