Использование MySQL "если существует"
вот два утверждения, которые я хотел бы работать, но которые возвращают сообщения об ошибках:
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;
вопросительные знаки есть, потому что я использую параметризованные, подготовленные, операторы с PDO PHP. Однако я также попытался выполнить это с данными вручную, и это действительно не работает.
хотя я хотел бы знать, почему каждый из них не работает, я бы предпочел использовать первый запрос, если его можно заставить работать.
4 ответа:
вы не можете использовать блок управления 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 = ?)
Я нашел пример 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;
выберите if ((выберите count (*) из gdata_calendars где
group
= ? А id = ?),1,0);для подробного объяснения вы можете посетить здесь