加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – SQL查询 – CASE意外令牌

发布时间:2020-12-11 23:51:41 所属栏目:MySql教程 来源:网络整理
导读:我有以下SQL查询: SELECT w.id,w.name,m.subject,m.id FROM users AS w,i_c AS c,(SELECT _id,u_id,subject FROM i_m WHERE (_id,tmstmp) IN (SELECT _id,max(tmstmp) FROM i_m GROUP BY _id)) m WHERE (c.uid_1 = '2' OR c.uid_2 = '2') AND CASE WHEN c.u

我有以下SQL查询:

SELECT w.id,w.name,m.subject,m.id 
FROM users AS w,i_c AS c,(SELECT _id,u_id,subject FROM i_m WHERE (_id,tmstmp) IN 
        (SELECT _id,max(tmstmp) FROM i_m GROUP BY _id)) m 
        WHERE (c.uid_1 = '2' OR c.uid_2 = '2') AND 
        CASE WHEN c.uid_1 = '2' THEN w.id = c.uid_2 
        WHEN c.uid_2 = '2' THEN w.id = c.uid_1 END 
        AND (c.id = m.id) ORDER BY m.tmstmp DESC

它在我的第一台服务器上工作正常但在第二台服务器上给了我

Unexpected Token. (near "c" at position 280)

看了一些类似的问题,但仍未找到解决方案.
似乎问题是CASE.

谁能帮助我?任何帮助将非常感激.提前致谢.

最佳答案 你CASE是错的,CASE是一个表达式,而不是一个语句,你只能在THEN中指定一个值,而不是一个条件.

把它改成这个:

       w.id = CASE WHEN c.uid_1 = '2' THEN c.uid_2 
                   WHEN c.uid_2 = '2' THEN c.uid_1
              END 

像@Jarlh建议的那样,您可以使用可以稍微优化查询的OR:

WHERE ((c.uid_1 = '2' AND w.id = c.uid_2) OR
      (c.uid_2 = '2' AND w.id = c.uid_1)) AND 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读