我想知道是不是建议在SQLite(或其他SQL引擎)中使用CASE语句来替换数据。例如,假设我有一个查询。
SELECT Users,
CASE WHEN Active = 0 THEN 'Inactive'
WHEN Active = 1 THEN 'Active'
WHEN Active = 2 THEN 'Processing'
ELSE 'ERROR' END AS Active
FROM UsersTable;
何时更好地创建引用表并执行JOIN。在这种情况下,我将使用ActiveID,ActiveDescription创建一个表'ActiveStatesTable'并执行JOIN。
答案 0 :(得分:11)
CASE语句是首选语法:
答案 1 :(得分:3)
执行单独的表和JOIN绝对是编写此代码的更简洁方法。例如,如果要使用相同的映射编写另一个查询,会发生什么?您必须将CASE语句复制到新查询中,并且复制复制很糟糕。如果您需要添加新的活动状态会发生什么?
在性能方面,JOIN和CASE都应该相当便宜。由于评估的短路和少数情况,CASE可能会稍微提高性能,但在我看来,JOIN更清晰,更灵活,更具SQL-ey解决方案。
答案 2 :(得分:3)
CASE应该便宜得多,因为它不应该涉及任何I / O,但对于小型表,JOIN也不是那么昂贵(但要测试它)。
问题是,您是否需要在多个查询中维护此CASE,并且需要在其上建立任何参照完整性。