Если у вас большой объем данных или ваша «таблица» действительно представляет собой сложный запрос (скажем, подзапрос или представление), то отключение обычно происходит быстрее с cross join
, чем с union all
:
select t.user_id, t.date, r.result
from t cross join
(select 'a' as result union all
select 'b' as result union all
select 'c' as result
) r
where (t.a = 1 and r.result = 'a') or
(t.b = 1 and r.result = 'b') or
(t.c = 1 and r.result = 'c') ;
Для одной таблицы smalli sh производительность, вероятно, не имеет значения.