如何检查在mysql中存储多个值的变量中是不是存在特定值?

Posted

技术标签:

【中文标题】如何检查在mysql中存储多个值的变量中是不是存在特定值?【英文标题】:How to check if a particular value exists in a variable which stores multiple value in mysql?如何检查在mysql中存储多个值的变量中是否存在特定值? 【发布时间】:2014-09-07 11:23:32 【问题描述】:

我正在尝试使用 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

如何实现?

【问题讨论】:

【参考方案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(*),甚至没有人提到它,只是一直反对它。它解决了现在的问题,但是如果我真的需要从其他表中获取结果来执行它们会发生什么?

以上是关于如何检查在mysql中存储多个值的变量中是不是存在特定值?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查Mysql中是不是存在数组元素?

检查 VB.net 的 DataTable 中是不是存在值的最简单/最快的方法?

MySql 检查值是不是存在,然后将它们作为不同的列返回

为啥一个变量对多个值的不等式检查总是返回真?

为啥一个变量对多个值的不等式检查总是返回真?

如何检查MySQL中是不是存在一行? (即检查电子邮件是不是存在于 MySQL 中)