MySQL中如何单查询同时获取返回行数与数据并处理空结果?
单次查询同时获取数据和行数的实现方法
不同数据库有不同的简洁实现方式,以下是主流数据库的解决方案:
SQL Server
直接利用系统变量@@ROWCOUNT,它会记录上一条SELECT语句返回的行数,无需额外执行COUNT查询:
SELECT * FROM MyTable; -- 立即获取查询返回的行数 DECLARE @RowCount INT = @@ROWCOUNT; -- 查询结果会正常返回(即使无数据也会返回空结果集) IF @RowCount = 0 BEGIN -- 无数据时的额外处理逻辑 PRINT '无数据返回,执行额外操作'; END
MySQL
使用ROW_COUNT()函数(存储过程中通常默认支持该函数获取SELECT的匹配行数):
SELECT * FROM MyTable; SET @RowCount = ROW_COUNT(); IF @RowCount = 0 THEN -- 无数据时的额外处理 SELECT '无数据返回,执行额外操作' AS 提示信息; END IF;
PostgreSQL
方法1:用GET DIAGNOSTICS获取行数
SELECT * FROM MyTable; GET DIAGNOSTICS @RowCount = ROW_COUNT; IF @RowCount = 0 THEN -- 无数据时的额外处理 RAISE NOTICE '无数据返回,执行额外操作'; END IF;
方法2:CTE同时返回数据与总行数(适合需在结果集中展示行数的场景)
WITH QueryResult AS ( SELECT * FROM MyTable ) SELECT *, (SELECT COUNT(*) FROM QueryResult) AS 总行数 FROM QueryResult UNION ALL -- 无数据时返回一行标识记录(需匹配MyTable的列数,用NULL填充) SELECT NULL, NULL, 0 AS 总行数 WHERE NOT EXISTS (SELECT 1 FROM QueryResult);
以上方案均只需执行一次核心SELECT查询获取数据,避免了两次查询的性能损耗,同时满足你在存储过程中判断行数、处理无数据场景的需求。
内容的提问来源于stack exchange,提问作者Frank Schnabel
相关产品推荐
相关产品推荐

