Я задаюсь вопросом, если использование Оператора выбора в SQLite (или другие механизмы SQL) для замены данных не рекомендуется. Например, позволяет, говорят, что у меня есть запрос.
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;
Когда это лучше, чтобы составить ссылочную таблицу и выполнить СОЕДИНЕНИЕ. В этом случае я составил бы Таблицу 'ActiveStatesTable' с ActiveID, ActiveDescription и выполнил бы СОЕДИНЕНИЕ.
Оператор CASE является предпочтительным синтаксисом:
Создание отдельной таблицы и JOIN, безусловно, более чистый способ написания этого кода. Что произойдет, например, если вы захотите написать другой запрос с такими же сопоставлениями? Вам придется скопировать оператор CASE в новый запрос, а дублирование копий - это плохо. Что произойдет, если вам нужно добавить новое состояние Active?
С точки зрения производительности и JOIN, и CASE должны быть довольно дешевыми. CASE может быть немного более производительным из-за короткого замыкания оценки и нескольких случаев, но JOIN, на мой взгляд, более чистое и гибкое и более SQL-ey решение.
CASE должен быть намного дешевле, так как он не должен включать никаких операций ввода-вывода, но для небольших таблиц JOIN также не так дороги (но протестируйте его).
Вопрос в том, нужно ли вам поддерживать этот CASE в нескольких запросах и нужно ли вам устанавливать для него ссылочную целостность.