MYSQL ВЫБРАТЬ В ЕСЛИ IF - PullRequest
       10

MYSQL ВЫБРАТЬ В ЕСЛИ IF

22 голосов
/ 23 января 2011

Это такой простой вопрос, но я нигде не нашел ответа в течение 2 часов.

Как вы используете статистику MYSQL IF.Неважно, что я положил в это не работает.В SQL Server это 5-секундное задание.

Должно ли оно быть в процедуре?

Можно ли использовать SELECT в операторе IF?

Не очень интереснов функции IF здесь.

Спасибо за любую помощь.

Ответы [ 7 ]

13 голосов
/ 27 июня 2013

Как использовать IF оператор в выборе

select if(status>0, 'active', 'inactive') as status from users

Да, вы можете использовать select в пределах IF

Пример:

select if((select count(*) from versions) > (select count(*) from groups), true, false) as value
5 голосов
/ 10 июня 2014

Должно ли это быть в рамках процедуры?

Да, вам нужно пройти процедуру, чтобы использовать оператор if.

Можете ли вы использовать SELECT в операторе IF?

Да, вы можете:

drop procedure if exists sp;

create procedure sp () begin
    if ((select 1 /*from whatever table would work*/)=1) then
        select 'it works';
    end if;
end;

call sp;

drop procedure sp;
5 голосов
/ 23 января 2011

Вы можете выбрать другое поле из того же запроса, но использование запроса выбора может не поддерживаться так как запрос может возвращать несколько значений, MySQL не поддерживает концепцию строки в столбце.

SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1

здесь field1, field2, field3 - это поля в одной таблице

Вам это помогает?

2 голосов
/ 07 мая 2013

Вы намекали на это в своем комментарии , но ни один из ответов здесь не указывает это явно, поэтому я буду:

В MySQL вы не можете использовать оператор IF вне тела хранимой процедуры. Документация подразумевает это, когда вводит понятие как «оператор IF для хранимых программ » (мой акцент).

Насколько я вижу, не существует простого способа управления потоком выполнения в инструкциях, выданных в командной строке или через клиента (например, из PHP), кроме как путем запроса значений, а затем переключения потока управления на основе этих значений вне MySQL (то есть используя оператор PHP if вместо MySQL). Я хотел бы быть исправлен на это, хотя: -)


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

IF x THEN 
  INSERT INTO mytable (mycol)
  VALUES ('foo')
END IF

может стать

INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x

(согласно этому ответу )


Вы также можете создать, вызвать, а затем удалить новую хранимую процедуру:

DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
  IF x THEN 
    INSERT INTO mytable (mycol)
    VALUES ('foo');
  END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;

(согласно этому ответу )

2 голосов
/ 23 января 2011

вы ищете CASE WHEN?http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

IF уже есть в руководстве http://dev.mysql.com/doc/refman/5.0/en/if-statement.html

Я думаю, ссылка @Nanne более актуальна.Просто добавив его в список ссылок здесь.http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

0 голосов
/ 09 мая 2014

Несколько запросов MySQL с использованием if иллюстрирует подход, который, вероятно, уместен здесь.

Обратите внимание, что я предположил, что этот вопрос задает вопрос "как я могу использовать данные из таблицы для направления потока управления, который может изменить какую-то другую часть базы данных?"

0 голосов
/ 23 января 2011
    CASE
        WHEN receiver = '$userid' THEN receiver
        ELSE sender
    END AS contact
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...