Esto debería hacerlo:
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
Eliminar el COUNT
si quieres una lista de amigos.
EDITAR
Según lo solicitado, una explicación.
Eres JOIN
ing una tabla a sí mismo porque está interesado en las relaciones entre las filas.
Decidí crear un alias para las tablas como me
y you
para aclarar la relación. Lo que está diciendo es que la columna A
puede referirse a mí como el seguidor o tú como seguidor. Columna B
se refiere al seguido
Si cambiara el nombre de las columnas, la consulta se leería más claramente
si A
-> follower
y B
-> follower
, tendríamos:
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
Entonces está diciendo, toma dos copias de esta tabla y JOIN
las filas donde el seguidor en me
es el seguidor en you
. Luego, filtre y muestre solo las filas donde el seguidor está en me
es el seguidor en you
... allí capturando tu deseo de tener (A == B) && (B == A)
Tal vez los alias de la tabla no sean tan buenos, pero espero que eso aclare un poco.
SEGUNDA EDICIÓN Según los comentarios a continuación, una forma más clara puede ser:
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