Небольшой хак, позволяющий обработать «Empty set» в старых версиях MySQL (4+), в которых нет функций.
При написании небольшого запроса, я застопорился на следующей проблеме: в базе небыло запрашиваемой информации. Выглядело это примерно так:
В этом блоке case как я только не пробовал получить единичку: функции, математические, логические опрерации, но ничегоне помогало: в ответ, при тестировании, было лишь «Empty set (0.06 sec)».
Я уж было решил оставить написаный практически сразу «костыль» в виде:
Найти решение мне помог мой старый приятель, который посоветовал следующий подход: использовать номера столбцов, вместо их имён, а так же испоользовать обычный count. В результате, правильный запрос выглядит так:
см. так же:
dev.mysql.com/doc/refman/4.1/en/all-subqueries.html
При написании небольшого запроса, я застопорился на следующей проблеме: в базе небыло запрашиваемой информации. Выглядело это примерно так:
set @var = ( select case when t1.field is not null then t1.field else 1 end as field_name from table1 t1 join table2 t2 on t1.tid = t2.id where t1.field2 = '_UNEXISTING_IN_DB_VALUE_' order by t1.tid desc limit 1 );
В этом блоке case как я только не пробовал получить единичку: функции, математические, логические опрерации, но ничегоне помогало: в ответ, при тестировании, было лишь «Empty set (0.06 sec)».
Я уж было решил оставить написаный практически сразу «костыль» в виде:
set @var2 = (select if(@var is null,1,@var));
Найти решение мне помог мой старый приятель, который посоветовал следующий подход: использовать номера столбцов, вместо их имён, а так же испоользовать обычный count. В результате, правильный запрос выглядит так:
set @var = ( select case when count(1) > 0 then t1.field else 1 end as field_name from table1 t1 join table2 t2 on t1.tid = t2.id where t1.field2 = '_UNEXISTING_IN_DB_VALUE_' order by t1.tid desc limit 1 );
см. так же:
dev.mysql.com/doc/refman/4.1/en/all-subqueries.html