【问题标题】:Trying to make a query尝试查询
【发布时间】:2013-10-18 02:29:29
【问题描述】:

我知道这个查询可能有缺陷,但你能告诉我如何让它变得更好吗?它给了我错误。我是初学者,请不要无礼。

查询是:

SET @start = 0;

IF @start <= 45 
                   (SELECT 
                   groups.id AS groupid, 
                   count(papers.classes) AS cl, 
                   start + cl AS st 
               FROM groups,
                    gpaper,
                    papers 
               WHERE cid = '1'
                   AND sid = '4'
                   AND groups.id = '14'
                   AND gpaper.gid = groups.id
                   AND gpaper.pid = papers.paperid 
              ORDER BY groupname) AS t

我想要查询的结果,直到 st 等于 cl。

得到的错误是这样的:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获得在 'IF @start

【问题讨论】:

  • 错误是什么?知道我们必须解决什么问题或解释什么会更容易。
  • I want result from the query until st is equal to cl. I know cl is not defined。您如何将未定义的事物与另一个事物等同起来?我认为如果您能展示一些示例数据和预期结果会更好。
  • 它将是一个 php 变量。对不起,让我更正一下。
  • 没有看到正确的 DDL 和期望的结果,很难提供帮助。
  • 如果您在开始时删除() As t,它可能会起作用。但从逻辑上讲,您应该使用 table Join 而不是 From table1, table2 这是老式的语法,性能受到影响。

标签: mysql sql select if-statement


【解决方案1】:

这是

IF (whatever = whatever) THEN /*<- then!*/
SELECT whatever FROM whatever; /*no parantheses and no alias*/
END IF;

另外请注意,你不能在一个简单的查询中使用它,你必须在存储过程或函数中使用它。

【讨论】:

    【解决方案2】:

    您似乎只想执行相同的查询 46 次,唯一的区别是您是否将 0、1、....、45 添加到字段。

    如果是这样,它可能可以通过单个 SELECT 来完成:-

    SELECT Sub1.groupid, Sub1.cl, Sub1.cl + Sub0.iCnt AS st
    FROM
    (
        SELECT units.i + tens.i * 10 AS iCnt
        FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
        CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
        HAVING iCnt BETWEEN 0 AND 45
    ) Sub0
    CROSS JOIN
    (
        SELECT groups.id AS groupid, count(papers.classes) AS cl
        FROM groups
        INNER JOIN gpaper ON gpaper.gid = groups.id
        INNER JOIN papers ON gpaper.pid = papers.paperid 
        WHERE cid = '1'
        AND sid = '4'
        AND groups.id = '14'
    ) Sub1
    ORDER BY Sub0.iCnt, groupname
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多