使用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