У меня есть этот запрос, который делает то, что мне нужно, но я чувствую, что могу немного его улучшить, но не знаю, как.
SELECT *
(CASE WHEN (SELECT f1 FROM tbl1 WHERE cond1 ORDER BY o1 LIMIT 1) then 'something0'
WHEN (SELECT f1 FROM tbl1 WHERE cond2 ORDER BY o2 LIMIT 1) then 'something1'
WHEN (SELECT f1 FROM tbl1 WHERE cond3 ORDER BY o3 LIMIT 1) then 'something2'
WHEN (SELECT f1 FROM tbl1 WHERE cond4 ORDER BY o4 LIMIT 1) then 'something3'
WHEN (SELECT f1 FROM tbl1 WHERE cond5 ORDER BY o5 LIMIT 1) then 'something4'
END) as columnX
FROM tbl1
WHERE another_cond1 AND f1 = (SELECT f1 FROM tbl1 WHERE cond1 ORDER BY o1 LIMIT 1)
OR another_cond2 AND f1 = (SELECT f1 FROM tbl1 WHERE cond2 ORDER BY o2 LIMIT 1)
OR another_cond3 AND f1 = (SELECT f1 FROM tbl1 WHERE cond3 ORDER BY o3 LIMIT 1)
OR another_cond4 AND f1 = (SELECT f1 FROM tbl1 WHERE cond4 ORDER BY o4 LIMIT 1)
OR another_cond5 AND f1 = (SELECT f1 FROM tbl1 WHERE cond5 ORDER BY o5 LIMIT 1)
Я пытался использовать переменные, но без особого успеха, особенно после прочтения документации по MySQL, в которой говорится: «Как правило, вам никогда не следует присваивать значение пользовательской переменной и читать значение в одном и том же выражении».
Любая помощь будет принята с благодарностью.
EDIT
Я пытался с JOINS, и с LEFT JOINS не будет работать, потому что запросы могут не дать никаких результатов. С эмуляцией FULL OUTER JOIN это займет слишком много времени. (Проверено на таблице с ~ 5000 строками)