Isso deve servir:
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
Remova o
COUNT
se você quiser uma lista de amigos. EDITAR
Conforme solicitado, uma explicação.
Você está
JOIN
ing uma tabela para si mesmo porque você está interessado nas relações entre as linhas. Eu decidi apelidar as tabelas como
me
e you
para deixar a relação clara. O que isso está dizendo é que a coluna A
pode se referir a mim como o seguidor ou você como seguidor. Coluna B
refere-se ao seguidor Se você renomeasse as colunas, a consulta ficaria mais clara
se
A
-> follower
e B
-> follower
, terí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
Então está dizendo, pegue duas cópias desta tabela e
JOIN
as linhas onde o seguidor em me
é o seguidor em you
. Em seguida, filtre e mostre apenas as linhas onde o seguidor em me
é o seguidor em you
... lá capturando seu desejo de ter (A == B) && (B == A)
Talvez os aliases de tabela não sejam tão bons, mas espero que isso esclareça um pouco.
SEGUNDA EDIÇÃO De acordo com os comentários abaixo, uma forma mais clara pode 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