2015-12-01 5 views
1

я хранимая процедура, в которой есть if заявление, где foto_id является integer и datums имеет date типа:MySQL оператор не работает должным образом

if((select count(*) from (select pv.Datums, pv.Fotografs from pieteikumi_view pv 
    where pv.Fotografs=foto_id and pv.Datums=datums)as tab) = 0) then 
    select 3; 
else 
    select -2; 

Когда я тестировал за пределами процедуры с теми же самыми значениями , так как при вызове процедуры, как это:

select count(*) from (select pv.Datums, pv.Fotografs from pieteikumi_view pv 
    where pv.Fotografs='9' and pv.Datums='2016-01-01')as tab; 

я получить желаемый результат, однако внутри процедуры if оператор возвращает true, даже если этот оператор select возвращает количество строк. Я был бы рад любым указателям на то, что я делаю неправильно ...

P.S. Является ли эта информация достаточной или мне нужно предоставить полную информацию о процедуре и таблице?

+0

Используйте вместо этого SELECT EXISTS. –

ответ

0

Прежде всего, это как если заявление выглядит в MySql:

IF Boolean_expression 
    { sql_statement | statement_block } 
[ ELSE 
    { sql_statement | statement_block } ] 

Если вы пишете это таким образом, что все должно быть хорошо. Кроме того, вы всегда можете использовать CASE КОГДА, это будет примерно так:

SELECT CASE WHEN 
((select count(*) from (select pv.Datums, pv.Fotografs from pieteikumi_view pv where pv.Fotografs=foto_id and pv.Datums=datums)as tab) = 0) 
THEN 3 
ELSE -2 
END; 
+0

Я просто попытался написать точно так же, как вы предоставили синтаксис инструкции if, но MySQL Workbench менял ошибки слева и справа. Я мог писать только 'if выражение then' ' statement; ' ' else' 'statement; ' ' end if; ' – user3665674

+0

Как и я, я просто не могу понять, как переписать, используя' select case', когда у меня есть несколько вложенных операторов 'if' и' insert into' внутри них. – user3665674

Смежные вопросы