使用MySQL的"IF EXISTS"

C. *_* E. 64 mysql

这是我想要工作的两个语句,但它们返回错误消息:

IF EXISTS (SELECT * FROM gdata_calendars WHERE `group` =  ? AND id = ?) SELECT 1 ELSE SELECT 0
Run Code Online (Sandbox Code Playgroud)

IF ((SELECT COUNT(*) FROM gdata_calendars WHERE `group` =  ? AND id = ?) > 0)  SELECT 1 ELSE SELECT 0;
Run Code Online (Sandbox Code Playgroud)

问号是存在的,因为我使用PHP的PDO参数化,准备好的语句.但是,我也尝试手动执行此操作,但它确实无效.

虽然我想知道为什么每个都不起作用,但我更愿意使用第一个查询,如果它可以工作.

Ric*_*iwi 113

您不能使用IF控制块OUTSIDE功能.这会影响您的两个查询.

将EXISTS子句转换为子查询,而不是IF函数

SELECT IF( EXISTS(
             SELECT *
             FROM gdata_calendars
             WHERE `group` =  ? AND id = ?), 1, 0)
Run Code Online (Sandbox Code Playgroud)

事实上,布尔值返回为1或0

SELECT EXISTS(
         SELECT *
         FROM gdata_calendars
         WHERE `group` =  ? AND id = ?)
Run Code Online (Sandbox Code Playgroud)

  • 是否可以对布尔值返回执行另一个查询. (6认同)

小智 30

我发现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
Run Code Online (Sandbox Code Playgroud)

- 为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;
Run Code Online (Sandbox Code Playgroud)

  • 此答案的 MySQL 部分似乎不起作用。 (7认同)
  • 如果我们使用这段代码,MySQL 总是返回值 - 它没有按预期工作。 (2认同)