在MySQL中,有时我们会将枚举值存储为整数(int)类型,但在查询时需要显示为对应的字符串或枚举值。这种设计常见于性能优化(整数比字符串占用更少空间)或遵循某些编码规范。
SELECT
id,
CASE status
WHEN 0 THEN 'Pending'
WHEN 1 THEN 'Approved'
WHEN 2 THEN 'Rejected'
ELSE 'Unknown'
END AS status_text
FROM orders;
SELECT
id,
ELT(status + 1, 'Pending', 'Approved', 'Rejected') AS status_text
FROM orders;
SELECT
id,
FIELD(status, 0, 1, 2) AS status_code,
ELT(FIELD(status, 0, 1, 2), 'Pending', 'Approved', 'Rejected') AS status_text
FROM orders;
-- 创建映射表
CREATE TABLE status_mapping (
code INT PRIMARY KEY,
description VARCHAR(50)
);
INSERT INTO status_mapping VALUES
(0, 'Pending'),
(1, 'Approved'),
(2, 'Rejected');
-- 查询时JOIN
SELECT o.id, m.description AS status_text
FROM orders o
LEFT JOIN status_mapping m ON o.status = m.code;
# Python示例
status_map = {
0: 'Pending',
1: 'Approved',
2: 'Rejected'
}
cursor.execute("SELECT id, status FROM orders")
for row in cursor.fetchall():
print(f"ID: {row[0]}, Status: {status_map.get(row[1], 'Unknown')}")
| 方法 | 优点 | 缺点 | |------|------|------| | CASE WHEN | 灵活,可处理不连续值 | SQL较长,维护不便 | | ELT | 简洁 | 只适用于连续整数 | | 映射表 | 易维护,可动态修改 | 需要额外表,性能略低 | | 应用层 | 不依赖数据库 | 业务逻辑分散 |
没有搜到相关的文章