Использование 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. Тем не менее, я также попытался выполнить это с данными вручную, и это действительно не работает.
Хотя я хотел бы знать, почему каждый из них не работает, я бы предпочел использовать первый запрос, если его можно заставить работать.
Ответы
Ответ 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