Uso de "SI EXISTE" de MySQL
Aquí hay dos declaraciones con las que me gustaría trabajar, pero que devuelven mensajes de error:
IF EXISTS (SELECT * FROM gdata_calendars WHERE `group` = ? AND id = ?) SELECT 1 ELSE SELECT 0
y
IF ((SELECT COUNT(*) FROM gdata_calendars WHERE `group` = ? AND id = ?) > 0) SELECT 1 ELSE SELECT 0;
Los signos de interrogación están ahí porque uso declaraciones parametrizadas y preparadas con PDO de PHP. Sin embargo, también intenté ejecutar esto con datos manualmente y realmente no funciona.
Si bien me gustaría saber por qué cada una de ellas no funciona, preferiría utilizar la primera consulta si se puede hacer que funcione.
No puede utilizar el bloque de control IF FUERA de las funciones. Eso afecta a ambas consultas.
Convierta la cláusula EXISTS en una subconsulta en lugar de dentro de una función IF
SELECT IF( EXISTS(
SELECT *
FROM gdata_calendars
WHERE `group` = ? AND id = ?), 1, 0)
De hecho, los valores booleanos se devuelven como 1 o 0.
SELECT EXISTS(
SELECT *
FROM gdata_calendars
WHERE `group` = ? AND id = ?)
El ejemplo de RichardTheKiwi me pareció bastante informativo.
Solo para ofrecer otro enfoque si estás buscando algo comoIF EXISTS (SELECT 1 ..) THEN ...
-- lo que podría escribir en 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
-- reescrito para 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;