在MySQL中使用数组变量拼接并执行SQL

  • 在日常编写SQL中,使用变量来灵活的构建执行的SQL语句是比较常见的。就像在编程中使用变量、函数参数等是一样的道理。本文介绍使用JSON函数(JSON_ARRAYJSON_SEARCH)、以及 FIND_IN_SET 如何简单的实现带有数据组变量的SQL拼接与执行。使用该方法,则无需使用CONCAT函数拼接SQL,再使用PREPARE/EXECUTE语法执行,所以会更加简洁,可读性、扩展性更强。

    具体的,例如需要再查询结果中找到u_name在数组@u_list_j中的记录,那么使用JSON方式可以按照如下模式实现:

    SET @u_list_j = JSON_ARRAY('zhou','wu','zheng','wang','zhuge');
    
    SELECT 
        id,u_name 
    FROM 
        t_01 
    WHERE 
        JSON_SEARCH(@u_list_j,'one',t_01.u_name);

    另一种较为常见的方法是使用 FIND_IN_SET 函数。其使用方法如下:

    set @u_list_s = 'zhou,wu,zheng,wang,zhuge';
    
    SELECT 
        u_name 
    FROM 
        t_01 
    WHERE 
        FIND_IN_SET(t_01.u_name,@u_list_s);

    另外,还可以尝试使用 LOCATE 函数实现,只是使用该函数需要注意,在做字符串匹配的时候容易出现的重复、错误匹配问题。例如,数组中存在”zhuge”,那么匹配”zhu”,则可能匹配成功,但这并不是期望的结果。

    示例表:

    本文中使用的一些示例表如下:

    CREATE TABLE t_01(
      id int UNSIGNED AUTO_INCREMENT primary key,
      u_name varchar(32)
    );
    
    INSERT INTO t_01(u_name) values
      ('wu'),
      ('zhao'),
      ('qian'),
      ('sun'),
      ('li');

    Leave a Reply

    Your email address will not be published. Required fields are marked *