为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL的“如果存在”的用法

MySQL的“如果存在”的用法

SMILET 2019-07-13 14:40:59
下面是我想要处理的两条语句,但它们返回错误消息: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参数化、准备好的语句。但是,我也尝试过手动执行这些数据,但它实际上不起作用。虽然我想知道为什么每个查询都不能工作,但我更愿意使用第一个查询(如果可以的话)。
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

不能在函数之外使用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 = ?)


查看完整回答
反对 回复 2019-07-13
?
慕容708150

TA贡献1831条经验 获得超4个赞

我找到了这个例子RichardTheKiwi信息丰富。

只是为了提供另一种方法,如果你想要的是IF EXISTS (SELECT 1 ..) THEN ...

-我用MSSQL写的东西

IF EXISTS (SELECT 1 FROM Table WHERE FieldValue='')BEGIN
    SELECT TableID FROM Table WHERE FieldValue=''ENDELSEBEGIN
    INSERT INTO TABLE(FieldValue) VALUES('')
    SELECT SCOPE_IDENTITY() AS TableIDEND

-为MySQL重写

IF (SELECT 1 = 1 FROM Table WHERE FieldValue='') THENBEGIN
    SELECT TableID FROM Table WHERE FieldValue='';END;ELSEBEGIN
    INSERT INTO Table (FieldValue) VALUES('');
    SELECT LAST_INSERT_ID() AS TableID;END;END IF;


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 1101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信