Das sollte es tun:
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
Entfernen Sie den COUNT
wenn du eine Freundesliste haben möchtest.
BEARBEITEN
Wie gewünscht, eine Erklärung.
Sie sind JOIN
eine Tabelle an sich selbst zu übertragen, weil Sie an den Beziehungen zwischen Zeilen interessiert sind.
Ich habe mich entschieden, die Tabellen als me
zu aliasieren und you
um den Zusammenhang deutlich zu machen. Was das sagt, ist diese Spalte A
kann mich als den Follower bezeichnen oder Sie als Follower. Spalte B
bezieht sich auf den followee
Wenn Sie die Spalten umbenennen würden, würde die Abfrage klarer lesen
wenn A
-> follower
und B
-> followee
, hätten wir:
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
Es heißt also, nimm zwei Kopien dieser Tabelle und JOIN
die Zeilen, in denen der Follower in me
steht ist der Follower in you
. Filtern Sie dann und zeigen Sie nur die Zeilen an, in denen sich der Follower in me
befindet ist der Follower in you
... indem Sie Ihren Wunsch nach (A == B) && (B == A)
festhalten
Vielleicht sind die Tabellenaliase nicht so toll, aber ich hoffe, das klärt ein wenig auf.
ZWEITE BEARBEITUNG Gemäß den Kommentaren unten könnte eine klarere Form sein:
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