Tôi có SQL
truy vấn sau đây:SQL Query - TRƯỜNG HỢP bất ngờ Mã
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
Nó hoạt động tốt trên máy chủ đầu tiên của tôi, nhưng, trên một máy chủ thứ hai, mang lại cho tôi
Unexpected Token. (near "c" at position 280)
Nhìn một số tương tự vấn đề nhưng vẫn không tìm thấy giải pháp. Dường như sự cố là CASE
.
Có ai có thể giúp tôi không? Bất kì sự trợ giúp nào đều được đánh giá cao. Cảm ơn trước.
Replace trường hợp với điều kiện OR-ed sẽ thậm chí còn tốt hơn. (Dễ dàng hơn để tối ưu hóa.) – jarlh
Nó "hoạt động" bởi vì MySQL làm cho các biểu thức boolean thực sự trở về 0 hoặc 1. Đó là một cái gì đó tôi đã không nhìn thấy trong bất kỳ DBMS khác. (Tôi sẽ không ngạc nhiên khi máy chủ thứ hai không thực sự là MySQL, vì thông báo lỗi không giống như nó.) –