如何检查在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中存储多个值的变量中是不是存在特定值?的主要内容,如果未能解决你的问题,请参考以下文章