Điều này nên làm điều đó:
SELECT COUNT(me.A) FROM social AS me
INNER JOIN social AS you ON me.B = you.A
WHERE me.A = you.B AND me.A = 1
Xóa COUNT
nếu bạn muốn có một danh sách bạn bè.
CHỈNH SỬA
Theo yêu cầu, một lời giải thích.
Bạn đang JOIN
nhập một bảng vào chính nó vì bạn quan tâm đến mối quan hệ giữa các hàng.
Tôi quyết định đặt bí danh cho các bảng là me
và you
để làm cho mối quan hệ rõ ràng. Điều đang nói là cột đó A
có thể gọi tôi là người theo dõi hoặc bạn là người theo dõi. Cột B
đề cập đến người theo dõi
Nếu bạn đổi tên các cột, truy vấn sẽ đọc rõ ràng hơn
if A
-> follower
và B
-> follower
, chúng tôi sẽ có:
SELECT COUNT(me.follower) FROM social AS me
INNER JOIN social AS you ON me.followee = you.follower
WHERE me.follower = you.followee AND me.follower = 1
Vì vậy, nó nói rằng, hãy lấy hai bản sao của bảng này và JOIN
các hàng mà người theo dõi trong me
là người theo dõi trong you
. Sau đó, lọc và chỉ hiển thị các hàng có người theo dõi trong me
là người theo dõi trong you
... ở đó bằng cách nắm bắt mong muốn của bạn là có (A == B) && (B == A)
Có lẽ bí danh của bảng không tuyệt vời như vậy, nhưng tôi hy vọng điều đó sẽ làm sáng tỏ một chút.
CHỈNH SỬA THỨ HAI Theo nhận xét bên dưới, một biểu mẫu rõ ràng hơn có thể là:
SELECT COUNT(me.A) FROM social AS me
INNER JOIN social AS you ON me.A = you.B AND me.B = you.A
WHERE me.A = 1