Использование 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   51  

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);

для подробного объяснения вы можете посетить здесь

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