IF语句中的MySQL选择查询

25

这是一个非常简单的问题,但我已经花了两个小时找不到答案。

如何使用MYSQL IF语句。无论我放什么都不起作用。在SQL Server中,这是一个5秒钟的工作。

它需要在一个过程中吗?

你可以在IF语句中使用SELECT吗?

我对IF函数没有真正的兴趣。

感谢任何帮助。


1
你在问什么?你并不真正关心IF,而是想知道如何使用IF吗?如果你在两个小时内没有找到任何东西,你看过这里吗? http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html - Nanne
1
@Nanne - 我猜测OP是在问如何在MySQL脚本中使用IF。例如,IF NOT EXISTS(...) CREATE TABLE。我记得以前在MySQL Workbench中尝试过这样做,但从未弄清楚。 - Martin Smith
@Martin可能是对的。因为在Google中,IF的第一个结果是MySQL手册的参考。如果@tura提供一个使用案例会更好。 - Nishant
6
我正在研究IF语句,而不是流程控制所使用的IF()函数。http://dev.mysql.com/doc/refman/5.0/en/if-statement.html 但它没有提到它不能在过程体外使用,我正试图出于调试目的这样做。CASE WHEN过程将适用于我的目的,只是让人烦恼的是文档没有提到这一点。感谢快速回复。 - tura
7个回答

17

如何在SELECT语句中使用IF语句

select if(status>0, 'active', 'inactive') as status from users

是的,您可以在 IF 中使用 select

示例:

select if((select count(*) from versions) > (select count(*) from groups), true, false) as value

这并没有回答问题: (这里并不是真的对IF函数感兴趣。) - undefined

8

需要在过程中吗?

是的,您需要在过程中使用if语句。

可以在IF语句中使用SELECT吗?

是的,您可以使用:

drop procedure if exists sp;

create procedure sp () begin
    if ((select 1 /*from whatever table would work*/)=1) then
        select 'it works';
    end if;
end;

call sp;

drop procedure sp;

5
您可以从同一查询中选择另一个字段,但是使用选择查询可能不被支持, 因为查询可能返回多个值,而MySQL不支持在列中的行概念。
SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1

这里的field1field2field3都是同一张表中的字段。
这对您有帮助吗?

2
问题是关于 if 语句,而不是 IF 函数 - Rich

4

你在评论中暗示了它,但是这里没有任何答案明确说明它,所以我来说一下:

在MySQL中,你不能在存储过程之外使用IF语句。当文档引入概念时,它将其称为“存储程序的IF语句”(我加粗了)。

据我所知,在命令行提示符或通过客户端(例如来自PHP)发出的语句中,没有简单的方法来控制执行流程,除非通过查询值,然后根据这些值在MySQL之外切换控制流(即使用PHP的if语句而不是MySQL的)。不过,如果我错了,我很乐意接受纠正 :-)


您可以使用其他构造逐个模拟这种情况。例如:

IF x THEN 
  INSERT INTO mytable (mycol)
  VALUES ('foo')
END IF

可以变成

INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x

(根据这个答案)


您还可以创建、调用并删除新的存储过程:

DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
  IF x THEN 
    INSERT INTO mytable (mycol)
    VALUES ('foo');
  END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;

根据此答案

2

0
    CASE
        WHEN receiver = '$userid' THEN receiver
        ELSE sender
    END AS contact

0

MySQL使用if多个查询说明了这里可能相关的一种方法。

请注意,我假设这个问题是在问“如何使用表中的数据来直接控制流程,从而可能改变数据库的其他部分?”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接