SQLite的CASE语句贵吗?

时间:2010-04-01 21:27:32

标签: sql mysql sqlite

我想知道是不是建议在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。

3 个答案:

答案 0 :(得分:11)

CASE语句是首选语法:

  • 它是ANSI(92?),所以它支持MySQL,Oracle,SQL Server,Postgres ......与数据库供应商特定的IF语法不同
  • 它支持短期累计 - 一旦标准匹配,其余评估不会执行

答案 1 :(得分:3)

执行单独的表和JOIN绝对是编写此代码的更简洁方法。例如,如果要使用相同的映射编写另一个查询,会发生什么?您必须将CASE语句复制到新查询中,并且复制复制很糟糕。如果您需要添加新的活动状态会发生什么?

在性能方面,JOIN和CASE都应该相当便宜。由于评估的短路和少数情况,CASE可能会稍微提高性能,但在我看来,JOIN更清晰,更灵活,更具SQL-ey解决方案。

答案 2 :(得分:3)

CASE应该便宜得多,因为它不应该涉及任何I / O,但对于小型表,JOIN也不是那么昂贵(但要测试它)。

问题是,您是否需要在多个查询中维护此CASE,并且需要在其上建立任何参照完整性。