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

Lọc từ bảng tham gia

JOIN giải pháp:

SELECT t.*
FROM topics t
 JOIN tags_topics t1 ON (t.id = t1.topicId AND t1.tagId = 1)
 JOIN tags_topics t2 ON (t.id = t2.topicId AND t2.tagId = 2)
 JOIN tags_topics t3 ON (t.id = t3.topicId AND t3.tagId = 3)

GROUP BY giải pháp:

Lưu ý rằng bạn cần liệt kê tất cả t.* trong GROUP BY , trừ khi bạn sử dụng MySQL hoặc SQLite.

SELECT t.*
FROM topics t JOIN tags_topics tt 
  ON (t.id = tt.topicId AND tt.tagId IN (1,2,3))
GROUP BY t.id, ...
HAVING COUNT(*) = 3;

Giải pháp truy vấn con:

SELECT t.*
FROM topics t
WHERE t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 1)
  AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 2)
  AND t.id = ANY (SELECT topicId FROM tags_topics tt WHERE tt.tagId = 3);

GROUP BY được sửa đổi giải pháp:

Đơn giản hóa GROUP BY bằng cách tách biệt tìm kiếm trong một truy vấn con.

SELECT t.*
FROM topics t
WHERE t.id IN (
  SELECT tt.topicId FROM tags_topics tt 
  WHERE tt.tagId IN (1,2,3))
  GROUP BY tt.id HAVING COUNT(*) = 3
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kết nối với Cơ sở dữ liệu MySQL bằng Python?

  2. Xuất Blob từ cơ sở dữ liệu MySQL sang tệp chỉ có SQL

  3. Sao chép các hàng từ bảng này sang bảng khác bằng cách sử dụng truy vấn CHÈN

  4. làm thế nào để biết khi nào CHÈN mysql kết thúc (nhiều kết nối)

  5. Lỗi câu lệnh dấu phân tách MySQL