Questo dovrebbe farlo:
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
Rimuovi il COUNT
se vuoi una lista di amici.
MODIFICA
Come richiesto, una spiegazione.
Sei JOIN
ing una tabella a se stessa perché sei interessato alle relazioni tra le righe.
Ho deciso di alias le tabelle come me
e you
per rendere chiara la relazione. Quello che sta dicendo è quella colonna A
può fare riferimento a me come seguace o tu come seguace. Colonna B
si riferisce al seguitore
Se dovessi rinominare le colonne, la query sarebbe più chiara
se A
-> follower
e B
-> followee
, avremmo:
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
Quindi sta dicendo, prendi due copie di questa tabella e JOIN
le righe in cui il followee in me
è il seguace in you
. Quindi, filtra e mostra solo le righe in cui il follower è in me
è il followee in you
... catturando il tuo desiderio di avere (A == B) && (B == A)
Forse gli alias delle tabelle non sono eccezionali, ma spero che questo chiarisca un po'.
SECONDA MODIFICA Per i commenti di seguito, un modulo più chiaro potrebbe essere:
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