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

Nhóm MySQL của với tham gia bên trái

Tôi nghĩ đây có thể là những gì bạn thực sự muốn ở đây:

SELECT DISTINCT
    status_id,
    (SELECT MAX(user_id) FROM comments c2 WHERE c1.status_id = c2.status_id) user_1,
    (SELECT user_id FROM comments c2 WHERE c1.status_id = c2.status_id
     ORDER BY user_id LIMIT 1 OFFSET 1) user_2
FROM comments c1
WHERE user_id IN (2,3);

Bản trình diễn

(cập nhật của bạn Fiddle)

Chúng tôi có thể sử dụng các truy vấn con tương quan để tìm user_id tối đa và user_id từ thứ hai đến tối đa cho mỗi status_id , và sau đó xoay từng cột đó thành hai cột riêng biệt. Sử dụng GROUP_CONCAT phương pháp tiếp cận có thể thích hợp hơn ở đây, vì nó cũng sẽ cho phép bạn dễ dàng điều chỉnh bất kỳ số lượng người dùng nào dưới dạng danh sách CSV.

Ngoài ra, nếu bạn đang sử dụng MySQL 8+ trở lên, thì chúng tôi có thể tận dụng các chức năng phân tích xếp hạng, điều này cũng sẽ dễ dàng hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tạo một mảng từ cơ sở dữ liệu

  2. Tạo khóa duy nhất không phân biệt chữ hoa chữ thường

  3. Gửi nhiều email với tệp đính kèm - đăng lại

  4. Có giới hạn nào đối với độ dài của truy vấn trong mysql không?

  5. Khi nào đóng con trỏ bằng MySQLdb