【问题标题】:How to check if a particular value exists in a variable which stores multiple value in mysql?如何检查在mysql中存储多个值的变量中是否存在特定值?
【发布时间】:2023-03-13 00:43:01
【问题描述】:

我正在尝试使用 phpmyadmin 触发器接口创建一个 sql 触发器语句。

尝试为表 1 做一些事情,如下所示:

BEGIN

declare @valid_number int ;

select id into @valid_number from table 2 ;

if 10 does not exist in @valid_number then
{do something here}
end if;
END

如何实现?

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案1】:

    首先:存储例程中的变量不能存储多个值,只能存储一个值。你的陈述

    select id into @valid_number from table 2 ;
    

    只有在查询只返回一行时才有效。会出现错误,如果查询返回多行,会出现警告,如果查询根本没有返回行,请看SELECT ... INTO的手册页:

    INTO 子句可以命名一个或多个变量的列表,这些变量可以是 用户定义的变量、存储过程或函数参数,或 存储的程序局部变量。 [...]

    选定的值被分配给变量。的数量 变量必须与列数匹配。查询应该返回一个 单行。如果查询没有返回任何行,则带有错误代码的警告 1329发生(无数据),变量值保持不变。 如果 查询返回多行,出现错误1172(结果包括 多于一排)。

    解决方案:

    创建一个语句并不难,在一行中为您提供所需的答案,即

    SELECT COUNT(*) into valid_number FROM example WHERE id = 10;
    

    如果 id 10 不存在于列 id 中,则此查询将返回 0,否则出现次数。当然有几种方法可以实现这一点,这只是其中一种。您可以将存储的例程重写为:

    BEGIN
        -- prefer local variables, don't use user defined, if not needed.
        DECLARE valid_number int;
    
        SELECT COUNT(*) into valid_number FROM example WHERE id = 10;
    
        IF valid_number = 0 THEN 
            -- do something here 
        END IF;
    
        SELECT result;
    END
    

    注意

    您可以使用cursor 来遍历查询的结果,但大多数时候都希望避免使用游标。在与此问题类似的条件下使用游标不是 SQL 方法,而且大多数时候效率很低。

    【讨论】:

    • 谢谢,这正是我一直在寻找的解决方案,我之前没有想到 count(*),甚至没有人提到它,只是一直反对它。它解决了现在的问题,但是如果我真的需要从其他表中获取结果来执行它们会发生什么?
    猜你喜欢
    • 2015-02-27
    • 1970-01-01
    • 2013-03-05
    • 2012-02-19
    • 1970-01-01
    • 2012-01-27
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多