2011-04-03 23 views
47

Éstos son dos afirmaciones que me gustaría trabajar, pero que devuelven mensajes de error:El uso de MySQL de "SI EXISTE"

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 allí porque usa declaraciones parametrizadas, preparadas, con el PDO de PHP. Sin embargo, también he intentado ejecutar esto con datos de forma manual, y realmente no funciona.

Si bien me gustaría saber por qué cada uno de ellos no funciona, preferiría utilizar la primera consulta si se puede hacer que funcione.

+0

Hola, ¿cuál es el mensaje de error que está recibiendo? – ysrb

+0

Para ambos: ERROR 1064 (42000): Tiene un error en su sintaxis SQL; –

Respuesta

86

No puede usar el bloque de control IF EXTERIOR de las funciones. Entonces eso afecta sus dos consultas.

Girar la cláusula EXISTS en una subconsulta lugar dentro de una función SI

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

De hecho, se devuelven booleanos como 1 o 0

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

¿Es posible ejecutar otra consulta en valores booleanos? – Sagar

+1

@RichardTheKiwi ¿Qué devuelve 'SELECT EXISTS',' bool', necesito verificar la existencia de registros en C++? – KernelPanic

+0

@RichardTheKiwi ¡perfecto! – bjesua

-7
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 
+4

sabe que la pregunta se relaciona con mysql y no con Microsoft sql, ¿verdad? –

25

encontré el ejemplo RichardTheKiwi bastante informativo.

Sólo para ofrecer otro enfoque si usted está buscando algo como IF 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; 
+5

Me sale un error de sintaxis aquí. –

+0

La parte de MySQL de esta respuesta no parece funcionar. –

0

seleccione if ((SELECT count (*) FROM gdata_calendars WHERE group =? AND id =?), 1,0);

Para una explicación detallada se puede visitar here

Cuestiones relacionadas