使用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使用参数化,准备好的语句。 不过,我也尝试手动执行这个数据,它真的不起作用。

虽然我想知道为什么每个人不工作,我宁愿使用第一个查询,如果可以使工作。

您不能使用function的外部IF控制块。 这会影响到你的两个查询。

将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 = ?) 

我发现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 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