比较两个sql语句结果的过程

时间:2013-05-01 10:39:58

标签: mysql

1)下面是我正在尝试的程序,我需要比较来自两个不同表的计数。 (tbl1和tbl2在要传递的参数中)。 但在上面的代码中,'a'和'b'的值被设置为语句。我需要两个语句中的结果值(count)在'IF'条件下进行比较。

declare a integer;
declare b integer;

set @a:=concat('select count(*) from ', tbl1);
/*PREPARE stmt1 FROM @a;
execute stmt1;
deallocate PREPARE stmt1;*/

set @b:= concat('select count(*) from ', tbl2);
/*PREPARE stmt2 FROM @b;
execute stmt2;
deallocate PREPARE stmt2;*/


 if
 @a=@b
 then 
 select 1;
 else
 select 2;
 end if;

2)实际上,我遇到了将'tbl1'和'tbl2'设置为过程中的参数的问题。 如果直接给出表名,下面的代码可以正常工作,但我需要它们作为参数。

CREATE PROCEDURE myproc (in tbl1 varchar(50), in tbl2 varchar(50))

declare a integer;
declare b integer;

set @a:=(select count(*) from tbl1);
/*PREPARE stmt1 FROM @a;
execute stmt1;
deallocate PREPARE stmt1;*/

set @b:= (select count(*) from tbl2);
/*PREPARE stmt2 FROM @b;
execute stmt2;
deallocate PREPARE stmt2;*/

if
@a=@b
then 
select 1;
else
select 2;
end if;

希望那里的任何人都可以帮助我解决问题。

1 个答案:

答案 0 :(得分:0)

正如上面的评论中所提到的,你可能根本就不应该这样做......但是,为了它的价值:

SET @sql := CONCAT('SELECT (
  SELECT COUNT(*) FROM `',REPLACE('`','``',tbl1),'`
) = (
  SELECT COUNT(*) FROM `',REPLACE('`','``',tbl2),'`
);');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql := NULL;

REPLACE()已经被用来尝试避免SQL注入(它有些粗糙,但它是没有更多信息的最佳方法)。