You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB中单次查询同时返回行数据及对应列名

MariaDB单次查询返回列名与值配对结果的解决方案

方案1:JSON格式输出(无需动态语句,适合列少场景)

MariaDB 10.2及以上版本支持JSON_OBJECT函数,可以直接构造列名与值配对的键值对结构:

SELECT JSON_OBJECT(
  'ID', ID,
  'foo', foo,
  'bar', bar,
  'fizz', fizz,
  'buzz', buzz
) AS key_value_result
FROM foobar
WHERE ID = 'abc';

返回结果示例:
{"ID": "abc", "foo": 0, "bar": 2, "fizz": 0, "buzz": 3}

方案2:自动拼接所有列的动态SQL方案(200列场景无需手动处理)

如果表列数过多不想手动拼写所有列名,可以通过以下一段动态SQL直接完成查询,无需你单独执行元数据查询后手动拼接列名:

-- 替换为你需要查询的ID值
SET @target_id = 'abc';
-- 自动生成查询语句
SET @query_sql = CONCAT(
  'SELECT JSON_OBJECT(',
  (SELECT GROUP_CONCAT(CONCAT('''', COLUMN_NAME, ''', ', COLUMN_NAME))
   FROM INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'foobar'),
  ') AS key_value_result FROM foobar WHERE ID = ?'
);
-- 执行查询
PREPARE stmt FROM @query_sql;
EXECUTE stmt USING @target_id;
DEALLOCATE PREPARE stmt;

该方案的元数据查询和最终数据查询合并在同一段执行逻辑中,你只需要执行这段代码即可拿到结果,完全不需要手动处理200个列名的拼接工作。

方案3:自定义元组格式输出

如果你需要的是类似((ID, abc), (foo,0), (bar,2), (fizz,0), (buzz,3))的字符串格式,可以调整拼接逻辑:

SET @target_id = 'abc';
SET @query_sql = CONCAT(
  'SELECT CONCAT(''(',
  (SELECT GROUP_CONCAT(CONCAT('''(', COLUMN_NAME, ', ''', ',', COLUMN_NAME, ', '')'''))
   FROM INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'foobar'),
  ')'' AS formatted_result FROM foobar WHERE ID = ?'
);
PREPARE stmt FROM @query_sql;
EXECUTE stmt USING @target_id;
DEALLOCATE PREPARE stmt;

内容的提问来源于stack exchange,提问作者ivorysoap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:27:01