mysql - 使用 LIMIT 时,在 MySQL 中使用 UNION ALL 获取单个 SELECT 语句的结果行数

标签 mysql select union-all

我需要在使用 LIMIT 的 UNION ALL SELECT 查询中获取单个 SELECT 语句的行数。 MySQL 文档对于获取查询的全局行数 非常清楚(将各个 SELECT 放在括号中,并将 SQL_CALC_FOUND_ROWS 仅放在 first 语句中,然后获取 FOUND_ROWS()通常的方式)。但是,我还需要 individual SELECT 语句的结果行数。查询,简化:

(SELECT SQL_CALC_FOUND_ROWS `field1`,`field2` FROM `db`.`table1` WHERE `id`>1000)
UNION ALL
(SELECT `field1`,`field2` FROM `db`.`table2` WHERE `id`>1000)
UNION ALL
...
(SELECT `field1`,`field2` FROM `db`.`tableN` WHERE `id`>1000)
LIMIT 0,10

如果将 SQL_CALC_FOUND_ROWS 放置在每个 SELECT 语句中,则会发出“'SQL_CALC_FOUND_ROWS' 的不正确使用/放置”错误。 谷歌了很多,在这里阅读相关消息,无济于事。可能真的很简单,我就是想不通。

最佳答案

您收到该错误是因为 SQL_CALC_FOUND_ROWS 可用于查询以将单个数字返回到 FOUND_ROWS()。

你可以这样做:

SELECT 'table1' AS tablename, COUNT(1) AS rowcount FROM table1 WHERE id > 1
UNION ALL
SELECT 'table2' AS tablename, COUNT(1) AS rowcount FROM table2 WHERE id > 1
...
SELECT 'tableN' AS tablename, COUNT(1) AS rowcount FROM tableN WHERE id > 1

如果有帮助。

如果你想从表中返回带有计数的行,那么修改它:

SELECT field1, field2, (SELECT COUNT(1) FROM table1 WHERE id > 1000) FROM table1 WHERE id > 1000
UNION ALL
SELECT field1, field2, (SELECT COUNT(1) FROM table2 WHERE id > 1000) FROM table2 WHERE id > 1000
...
SELECT field1, field2, (SELECT COUNT(1) FROM tableN WHERE id > 1000) FROM tableN WHERE id > 1000

从您的问题来看,您并不清楚您要达到的目标。

关于mysql - 使用 LIMIT 时,在 MySQL 中使用 UNION ALL 获取单个 SELECT 语句的结果行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318205/

相关文章:

php - Mysql Select,Where 语法从许多表中回显结果

SQL - 从另一个表的字段填充一个表

结合UNION ALL的表的VIEW的MySQL性能

mysql - 在SQL中选择交叉数据

mysql - 如何比较两个mysql表?

performance - UNION ALL 耗时太长

mysql - SQL:将未加密值与加密值进行匹配

php - 使用 CodeIgniter 连接多个表

php - MySQL 查询的 PDO 错误

mysql - 是否可以使用 LOAD DATA INFILE 类型的命令来更新数据库中的行?