Это должно сделать это:
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
, если вы хотите список друзей.
EDIT
По запросу, объяснение.
Вы 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