MySQL IF...THEN 后跟查询语句

标签 mysql sql stored-functions

像这样的东西在 MySQL 中是否有效:

DELIMITER //
CREATE FUNCTION LOGIN_VALIDATE(IN uName VARCHAR(32),IN uPass VARCHAR(32))
RETURNS BOOLEAN
BEGIN
    DECLARE row_count BOOLEAN DEFAULT 0;
    DECLARE stored_pass VARCHAR(32) DEFAULT NULL;
    DECLARE valid_return BOOLEAN DEFAULT 0;
    SELECT count(*) INTO row_count FROM Login WHERE userId='uName';
    IF row_count = 1 THEN 
        SELECT pWord INTO stored_pass FROM Login WHERE userId='uName';
    END IF;
    IF stored_pass = 'uPass' THEN 
        SET valid_return = 1;
    END IF;
    RETURN valid_return;
END //
DELIMITER ;

最佳答案

使用:

DECLARE valid_return BOOLEAN DEFAULT 0;

SELECT CASE WHEN COUNT(*) = 1 THEN 1 ELSE 0 END
  INTO valid_return
  FROM LOGIN l
 WHERE l.userid = @uName
   AND l.pword = @uPass

始终尽量减少通过表格的次数以获得您想要的结果。 SQL 是基于 SET 的,而不是过程性的 - 如果正确处理 SQL,它会更好地为您工作。

关于MySQL IF...THEN 后跟查询语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752972/

相关文章:

mysql - 如何在 SQL 中删除多个 MySql Apache 表行?

sql - 连接 2 个表,其中 table2 包含每个 table1 行的多行

sql - 一个 t-sql 查询中 UPDATE OUTPUT 内的 INNER JOIN

mysql - 不允许 NULL 参数到 MySQL/MariaDB 中的存储过程

php - 如何在 PDO 准备中使用通配符?

php - Flexslider 与 php 多个视频

MySQL 不为 <= 运算符返回正确的数据

sql - 在 SQL 中,LIMIT 是否返回按时间顺序最后插入的行?

sql - 错误 SQL Server 2012 : Parameters were not supplied for the function X

mysql从循环中的选择查询返回结果集