Подтвердить что ты не робот

Использование MySQL "IF EXISTS"

Вот два оператора, которые я хотел бы работать, но которые возвращают сообщения об ошибках:

IF EXISTS (SELECT * FROM gdata_calendars WHERE `group` =  ? AND id = ?) SELECT 1 ELSE SELECT 0

и

IF ((SELECT COUNT(*) FROM gdata_calendars WHERE `group` =  ? AND id = ?) > 0)  SELECT 1 ELSE SELECT 0;

Знаки вопроса есть, потому что я использую параметризованные, подготовленные, инструкции с PHP PDO. Тем не менее, я также попытался выполнить это с данными вручную, и это действительно не работает.

Хотя я хотел бы знать, почему каждый из них не работает, я бы предпочел использовать первый запрос, если его можно заставить работать.

4b9b3361

Ответ 1

Вы не можете использовать контрольный блок IF OUTSIDE. Таким образом, это влияет на оба ваших запроса.

Поверните предложение EXISTS в подзапрос вместо функции IF

SELECT IF( EXISTS(
             SELECT *
             FROM gdata_calendars
             WHERE `group` =  ? AND id = ?), 1, 0)

Фактически, булевы возвращаются как 1 или 0

SELECT EXISTS(
         SELECT *
         FROM gdata_calendars
         WHERE `group` =  ? AND id = ?)

Ответ 2

Я нашел пример RichardTheKiwi довольно информативным.

Просто чтобы предложить другой подход, если вы ищете что-то вроде IF EXISTS (SELECT 1 ..) THEN ...

- что я могу написать в MSSQL

IF EXISTS (SELECT 1 FROM Table WHERE FieldValue='')
BEGIN
    SELECT TableID FROM Table WHERE FieldValue=''
END
ELSE
BEGIN
    INSERT INTO TABLE(FieldValue) VALUES('')
    SELECT SCOPE_IDENTITY() AS TableID
END

- переписан для MySQL

IF (SELECT 1 = 1 FROM Table WHERE FieldValue='') THEN
BEGIN
    SELECT TableID FROM Table WHERE FieldValue='';
END;
ELSE
BEGIN
    INSERT INTO Table (FieldValue) VALUES('');
    SELECT LAST_INSERT_ID() AS TableID;
END;
END IF;

Ответ 3

if exists(select * from db1.table1 where sno=1 )
begin
select * from db1.table1 where sno=1 
end
else if (select * from db2.table1 where sno=1 )
begin
select * from db2.table1 where sno=1 
end
else
begin
print 'the record does not exits'
end