Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lỗi truy vấn MySQL với CASE và INNER JOIN

Bạn không thể chọn một bảng để tham gia vào một câu lệnh tình huống. Bạn nên nối trái vào cả hai bảng, sau đó chọn giá trị từ một trong số chúng trong case tuyên bố, như thế này:

SELECT a.user_id, 
       a.api_type,
       (case WHEN a.api_type = 0 THEN b.avatar ELSE c.avatar END) as avatar,
       (case WHEN a.api_type = 0 THEN b.user_id ELSE c.user_id END) as user_id
FROM a 
  LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id
  LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id
WHERE a.cookie_hash = :cookie_hash

Bạn có thể không cần biểu thức cuối cùng (...as user_id một), vì nó sẽ bằng a.user_id nếu có một hàng trong api_twitter hoặc api_foursquare khớp với a.user_id .

Bạn cũng phải đặt WHERE mệnh đề sau FROM mệnh đề:

CHỈNH SỬA: Có tính đến đề xuất tuyệt vời của ypercube, truy vấn sẽ giống như sau:

SELECT a.user_id, 
       a.api_type,
       COALESCE(b.avatar, c.avatar) as avatar
FROM a 
  LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id AND a.api_type = 0
  LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id and a.api_type = 1
WHERE a.cookie_hash = :cookie_hash


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng chuỗi .format () trong câu lệnh MySQL?

  2. Thay đổi tên cột trong MySQL

  3. Truy vấn MySQL PHP Trong đó x =$ biến

  4. Kết nối Mysql bị từ chối trên localhost

  5. Sử dụng các ứng dụng khách MySQL