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