mysql - SQL 查询 - CASE 意外标记

标签 mysql sql case

我有以下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 

关于mysql - SQL 查询 - CASE 意外标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071708/

相关文章:

mysql - Ansible mysql 授权

javascript - 了解 Node 的错误处理的尝试/捕获和域

javascript - jquery中的Json过滤

mysql - MySQL中如何获取3列的总数

sql - 创建一个新列,其中包含另一列后续行中的值列表

sql - 根据 CASE 从 3 个表之间的 LEFT JOIN 有条件地返回值

mysql - 使用 pt-table-sync 进行双向同步

mysql - 一个unique可以作为索引吗?

sql - 错误 : CASE types character varying and numeric cannot be matched

mysql - 我的 SQL 子查询 - 返回 Blob,需要文本值