【问题标题】:What's wrong with this case SQL query?这个案例 SQL 查询有什么问题?
【发布时间】:2011-09-28 04:59:23
【问题描述】:

也许你可以帮忙,我正在使用这个案例查询,我正在尝试用它来做 mysql 加权。它有什么问题?

  SELECT *
    FROM cronjob_reloaded
   WHERE site IN ('site1.com', 'site2.com')
ORDER BY (CASE site
            WHEN 'site1.com' THEN 0.2
            WHEN 'site2.com' THEN 0.8    ) * RAND( ) DESC
   LIMIT 0 , 30 

MySQL 说:文档

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ') * RAND() DESC 附近使用的正确语法 LIMIT 0, 30' 在第 4 行

【问题讨论】:

    标签: mysql sql case mysql-error-1064


    【解决方案1】:

    这是正确的 CASE 语法

    SELECT *
    FROM cronjob_reloaded
    WHERE site IN ('site1.com', 'site2.com' )
    ORDER BY (
      CASE 
        WHEN site = 'site1.com' THEN 0.2
        WHEN site = 'site2.com' THEN 0.8 
      END
    ) * RAND( ) DESC
    LIMIT 0 , 30 
    

    【讨论】:

    • 非常好用。因为我的数据库中有很多来自 site1 的条目,所以我正在尝试创建一个 sql,它只从站点 1 获取 20%,其余来自 site2
    【解决方案2】:

    CASE 必须以 END 结束:

    CASE site
    WHEN 'site1.com'
    THEN 0.2
    WHEN 'site2.com'
    THEN 0.8
    END -- Added this END to your query's CASE
    

    【讨论】:

      【解决方案3】:

      一个可能的问题是您没有使用 END CASE。

      变化:

      CASE site
      WHEN 'site1.com'
      THEN 0.2
      WHEN 'site2.com'
      THEN 0.8
      )
      

      收件人:

      CASE site
      WHEN 'site1.com'
      THEN 0.2
      WHEN 'site2.com'
      THEN 0.8
      END CASE
      

      参考:MySQL site

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 2010-10-21
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多