Отличный вопрос. Из-за структуры данных в этой таблице вы можете сделать это, присоединив таблицу к себе. У вас будет два набора данных, реплики друг друга.
Вы хотите убедиться, что существует двустороннее соответствие между uid
и profile_id
.
Вы также хотите, чтобы статус для обоих направлений был checked
SELECT
a.*
FROM matched_profiles a
inner join matched_profiles a2 on
a.uid = a2.profile_id
and a.profile_id = a2.uid
and a.status = 'checked'
and a2.status = 'checked';
У вас происходит некое явное / неявное соединение. Я переформатировал, чтобы быть полностью явным для ясности. Вам просто нужно добавить фильтр, чтобы убедиться, что все значения status
равны checked
.
Ниже приведен SQL-код для построения тестовой схемы, который удобно предоставить, задавая эти вопросы пользователям SO.
create table matched_profiles (
uid int,
profile_id int,
status varchar(18)
);
insert into matched_profiles
values
(1, 2, 'checked'),
(2, 1, 'checked'),
(3, 4, 'unchecked'),
(4, 1, 'unchecked'),
(4, 3, 'checked'),
(1, 4, 'checked');