ClickHouse has the `transform` function for this purpose:<p><pre><code> SELECT transform(id, [1, 2, 11], ['ClickHouse', 'Postgres', 'MongoDB'], '')
</code></pre>
It creates a lookup table. When you are using the CASE operator, in simple cases it will use the `transform` function under the hood.<p>There are more advanced capabilities:<p>- The `Join` table engine. It is a pre-warmed state for joining, a hash table kept in memory.<p>- Dictionaries. Pre-warmed, automatically updated lookup data structures from various sources. For example, you can connect a dictionary of company names from your operational database while keeping only the ids in ClickHouse.<p>And, just in case, the same CTE works as in SQLite:<p><pre><code> WITH countries AS (
SELECT c1 AS code, c2 AS name FROM VALUES(
('us', 'United States'), ('fr', 'France'), ('in', 'India')))
SELECT data.code, name FROM data LEFT JOIN countries ON countries.code = data.code;
</code></pre>
Example:<p><pre><code> milovidov-desktop :) WITH countries AS (
SELECT c1 AS code, c2 AS name FROM VALUES(
('us', 'United States'), ('fr', 'France'), ('in', 'India')))
SELECT data.code, name FROM (SELECT 'us' AS code) AS data LEFT JOIN countries ON countries.code = data.code;
┌─code─┬─name──────────┐
│ us │ United States │
└──────┴───────────────┘
</code></pre>
Disclaimer: I'm working on ClickHouse.