SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.05.2007 13:34:09

Bridges
Участник
Зарегистрирован: 27.04.2007
Сообщений: 7

If & Exists

Приветствую, Всех!!!
Имеется некий вопрос?
Как правильно пользоваться конструкциями if и Exists ?
Всю сеть перерыл, нашёл множество примеров, но так ни один и не заработал. К примеру:

IF EXISTS (SELECT userID  FROM users WHERE userid=1) THEN
SELECT *  FROM users WHERE userid=1;

SELECT COUNT(*) into @c  FROM users WHERE userid=1;
IF @c > 0 THEN
SELECT *  FROM users WHERE userid=1;

КАК ПРПАВИЛЬНО ПОЛЬЗОВАТЬСЯ ИМИ????
У меня MySql 4

Неактивен

 

#2 30.05.2007 15:48:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: If & Exists

Конструкция if имеет следующий синтаксис:

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

Применяется в хранимых процедурах и функциях. Верно для MySQL 5.1

Пример использования:

Код:

mysql> delimiter //
mysql> create procedure qqq(IN id_in int)
    -> if exists (select id from world.count where id=id_in)
    -> then select * from world.count where id=id_in;
    -> end if;//
Query OK, 0 rows affected (0.00 sec)


mysql> call qqq(13)//
+------+----------------------+
| id   | name                 |
+------+----------------------+
|   13 | BOBR                 |
+------+----------------------+
1 row in set (0.00 sec)

Для MySQL 4 IF EXISTS применяется в выражениях создания/удаления таблиц/баз данных. Например:

Код:

mysql> drop table IF EXISTS no_such_table;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Неактивен

 

#3 30.05.2007 16:28:49

Bridges
Участник
Зарегистрирован: 27.04.2007
Сообщений: 7

Re: If & Exists

Спасибо! буду знать, придётся ставить 5-ю smile

Неактивен

 

#4 30.05.2007 17:13:24

Bridges
Участник
Зарегистрирован: 27.04.2007
Сообщений: 7

Re: If & Exists

Кстати, во такой вопрос:
Вот, элементарные2 строки::::
set @q=1;
if  @q=1  then
select count(*) from users where userid=1;

// и так даже пробовал if  @q==1  then...
// и end if вконце вставлял

Ну где ошибка, в каком месте, знаю только, что где-то в if. Почему не выполняется???

Неактивен

 

#5 30.05.2007 17:33:07

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: If & Exists

IF .. END IF; может использоваться только в хранимых процедурах и функциях. Пришлите пожалуйста код процедуры целиком.

Есть еще другой вид IF, который является функцией языка и может использоваться в запросах. Имеет 3 аргумента - условие, значение в случае истинности условия и значение в случае ложности условия.

SELECT IF(2>3,"Fantastic','Thats real');

Также существует функция EXISTS, которая может использоваться с подзапросами. Возвращает истину, если подзапрос возвращает хотя бы одну строку.
SELECT name FROM country c WHERE EXISTS(select * from language where country=c.id)

Вернет все страны, для которых если соответствующая запись в таблице language (хотя бы одна)

За подробностями советую обратиться к следующим разделам мануала
http://dev.mysql.com/doc/refman/5.1/en/ … eries.html
http://dev.mysql.com/doc/refman/5.1/en/ … ement.html
http://dev.mysql.com/doc/refman/5.1/en/ … tions.html

Неактивен

 

#6 31.05.2007 10:37:17

Bridges
Участник
Зарегистрирован: 27.04.2007
Сообщений: 7

Re: If & Exists

Спасибо за ответ! smile
И попутно появился новый: какими средствами можно создавать процедуры в mysql5, т.е. какие среды для этого существуют??? а то с 4-й версией я работал с mysql control center 0.9.4

Неактивен

 

#7 31.05.2007 12:33:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: If & Exists

Рекомендую использовать MySQL Query Browser

http://mysql.com/products/tools/

Неактивен

 

#8 31.05.2007 13:23:20

Bridges
Участник
Зарегистрирован: 27.04.2007
Сообщений: 7

Re: If & Exists

Спасибо! Пока всё работает smile))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson