首页 > 解决方案 > 在 MySQL 中创建过程时出现未知的系统变量

问题描述

我不知道如何创建存储过程并在 while 语句中使用 select。这个查询会出现这个错误"unknown system variable 'tableview'"。请任何人帮助我修复它。谢谢你的帮助。

CREATE PROCEDURE tablebts()
BEGIN
    DECLARE x INT;
    SET x=0;
    SET tableview;

    WHILE x < 10 DO
        SET x=x + 1;
        SET tableview = SELECT idbts 
                        FROM (SELECT idbts, namesite, COUNT(idbts) AS jumlah 
                              FROM (SELECT ts.site_id AS idbts, tps.msisdn AS msisdn, tb.site_name AS namesite 
                                    FROM tb_profile_subscribers tps
                                    INNER JOIN tb_sitemap ts 
                                       ON tps.lac=ts.lac2g 
                                       or tps.lac=ts.lac3g 
                                      AND tps.cellid=ts.ci2g 
                                       OR tps.cellid=ts.ci3g_850 
                                       OR tps.cellid=ts.ci3g_2100_1
                                       OR tps.cellid=ts.ci3g_2100_2 
                                       OR tps.cellid=ts.ci3g_2100_3 
                                    INNER JOIN tb_bts tb 
                                       ON ts.site_id=tb.site_id 
                                    GROUP BY msisdn) msisdn 
                              GROUP BY idbts 
                              ORDER BY jumlah DESC 
                              LIMIT 1 OFFSET x) AS tabelbts
    END WHILE;

    SELECT tableview;
END$$

我还将 x 变量放入tableview查询中(单词“偏移 x”)。真的吗?请帮助我,并在此先感谢

标签: mysql

解决方案


与您的问题无关,但您也需要解决一些问题。

  • 您必须使用括号来强制正确的运算符顺序

现在你有A OR B AND C OR D因为AND有优先权你真的有

 A OR ( B AND C ) OR D

相反,您需要

(A OR B) AND (C OR D)
  • 或者您可以使用IN运算符来提高阅读能力

    INNER JOIN tb_sitemap ts 
       ON tps.lac IN ( ts.lac2g, ts.lac3g )
      AND tps.cellid IN ( ts.ci2g, ts.ci3g_850, ts.ci3g_2100_1, 
                          ts.ci3g_2100_2, ts.ci3g_2100_3 )
    

推荐阅读