关于#Mysql#的问题,如何解决?

大家好 请教大家一个问题

我想在Sql的where 字句中加入IF从而控制 and 条件

不知道应该如何做?

可以使用CASE语句实现:

CASE WHEN condition1 THEN column1 = 'value1' ELSE TRUE END
  AND CASE WHEN condition2 THEN column2 = 'value2' ELSE TRUE END

里面的TRUE也可以根据需要改成FALSE。还可以与其它普通column=value结合。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7775650
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:(超实用)mysql三目运算实现if,else的效果,避免不必要的查询
  • 同时,你还可以查看手册:MySQL 字符集、对齐方式、统一编码 指定字符集和排列方式 中的内容
  • 除此之外, 这篇博客: [自用]Mysql实践操作中的 IF 语句控制 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 实例:

    ---创建存储过程
    CREATE PROCEDURE study_if (IN i INT)
    BEGIN
    	IF i = 1 THEN
    		SELECT 1; # 执行查询1
    	ELSEIF i = 2 THEN 
    		SELECT 2;
    	ELSE
    		SELECT 3;
    	END IF;
    END;
     
    -- 调用存储过程
    CALL study_if(2);
    
  • 您还可以看一下 姚青林老师的7天带你玩转Mysql数据库之SQL语句课程中的 建库, 建表, 插入语句过程小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以使用MySQL中的IF()函数来在WHERE子句中控制AND语句。其语法如下:

    SELECT *
    FROM table_name
    WHERE
        IF(condition1, 1, 0) AND  --condition1为真时,AND语句执行
        IF(condition2, 1, 0) AND  --condition2为真时,AND语句执行
        ...
    

    其中,condition1、condition2等均为条件表达式,如果表达式的值为真,则返回1,否则返回0。这样,就可以在WHERE子句中控制多个AND条件的执行。举个例子,假设我们要查询表employee中工资大于3000并且工作岗位为Manager或Clerk的员工信息,可以这样写:

    SELECT *
    FROM employee
    WHERE
        IF(salary>3000, 1, 0) AND
        IF(job='Manager' OR job='Clerk', 1, 0);
    

    当然,如果需要在查询结果中展示工资是否大于3000,也可以使用IF()函数来处理:

    SELECT *,
           IF(salary>3000, '大于3000', '小于等于3000') AS salary_desc
    FROM employee
    WHERE
        IF(salary>3000, 1, 0) AND
        IF(job='Manager' OR job='Clerk', 1, 0);
    

    这样查询结果中会新增一个名为salary_desc的列来展示工资水平。

SELECT
            *
FROM
          表
<where>
           <if test="条件判断">
                AND xxx = #{xxx}
           </if>
           <if test="条件判断">
                AND xxx = #{xxx}
           </if>
            ......
</where>


```