Това трябва да стане:
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
Премахнете COUNT
ако искате списък с приятели.
РЕДАКТИРАНЕ
Както е поискано, обяснение.
Вие сте JOIN
преобразуване на таблица за себе си, защото се интересувате от връзките между редовете.
Реших да направя псевдоним на таблиците като me
и you
за да стане ясно връзката. Това, което казва, е тази колона A
може да се отнася към мен като последовател или вие като последовател. Колона B
се отнася до последователя
Ако трябваше да преименувате колоните, заявката ще се чете по-ясно
ако A
-> follower
и B
-> followee
, ще имаме:
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
Така се казва, вземете две копия на тази таблица и JOIN
редовете, където следват в me
е последователят в you
. След това филтрирайте и покажете само редовете, където е последователят в me
е последователят в you
... там, като улови желанието ви да имате (A == B) && (B == A)
Може би псевдонимите на таблицата не са толкова добри, но се надявам, че това малко изяснява.
ВТОРА РЕДАКТИРАНЕ Според коментарите по-долу, по-ясен формуляр може да бъде:
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