MySQL 使用子查询和 LIMIT 选择

标签 mysql select subquery limit

<分区>

我正在使用子选择来获取我需要的行 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 是我最后选择的 ID。我选择数据后保存。

现在我遇到的问题是我在每个循环中选择 1000 行并且在某个时候我选择了 1000 行不符合

WHERE c.active = 1

要求。 Select 不返回任何内容,而且我没有任何行 ID 来继续子选择。

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

最佳答案

当您在 LEFT JOIN(外部联接)的右侧表上使用 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

关于MySQL 使用子查询和 LIMIT 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912384/

相关文章:

mysql - SQL查询获取行直到列的总和等于某个值

mysql - 没有匹配时子查询执行缓慢

html - 在CSS中设置选择和输入元素的宽度

mysql - 选择具有相同列的所有行以分隔 mysql 中的列

MySQL选择等于多个值的地方

mysql - 从子子查询中引用父查询中的表

mysql - 子查询不在选择中聚合

MySQL如何查找几张表中的共同数据

php - 从我的数据库查询音频文件到 PHP

MySQL:具有多个结果的子查询