在MySQL中创建过程时未知的系统变量

时间:2018-11-22 07:15:31

标签: 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查询中(单词“ offset x”)。真的吗?请帮助我,并预先感谢

1 个答案:

答案 0 :(得分:1)

与您的问题无关,但您也需要修复一些问题。

  • 您必须使用括号来强制正确的操作员顺序

现在您拥有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 )