2013-09-10 3 views
0

Прошу прощения, если этот вопрос уже был решен, но я не знал, как правильно сформулировать свою проблему или что я должен искать.MySQL Выберите столбцы, которые имеют два совпадения в другой таблице

Так у меня есть 2 таблицы:

группы

id | name 

ЧЛЕНСТВО

id | user_id | group_id 

То, что я пытаюсь сделать, это найти все группы, которые пользователь с идентификатором 1 является членом, а также пользователем с id 2 является членом. Очевидно, что не работает:

SELECT groups.id FROM groups, memberships WHERE groups.id = memberships.group_id AND memberships.user_id = 1 AND memberships.user_id = 2; 

Я надеюсь, что вы понимаете мой вопрос, у меня возникли проблемы с поиском нужных слов для этой проблемы. Не стейсняйся спросить.

Редактировать: Оба пользователя должны быть членами группы.

ответ

1

Если я хорошо понимал, что вам нужны группы, где оба пользователя являются участниками?

Что-то вроде:

SELECT g1.id 
FROM groups g1, memberships m1, groups g2, memberships m2 
WHERE m1.group_id = g1.id AND m1.user_id = 1 
AND m2.group_id = g2.id AND m2.user_id = 2 
AND g1.group_id = g2.group_id; 
+0

Спасибо большое. Кажется, нужно делать именно то, что мне нужно. – Adura

0

Просто замените ваш последний AND с OR и поставить испытание user_id в (, как это:

SELECT groups.id 
FROM groups, memberships 
WHERE groups.id = memberships.group_id 
AND (memberships.user_id = 1 OR memberships.user_id = 2); 
0

Попробуйте это:

SELECT * 
FROM groups g 
     INNER JOIN memberships m 
       ON m.group_id = g.id 
WHERE m.user_id = '1' 
     OR m.user_id = '2' 
+0

Она также возвращает группы, либо один из двух пользователей является членом. Милан Завишич опубликовал рабочий запрос. – Adura

+0

@Adura, Ну, я думал, это было то, что вы хотели? – Starx

Смежные вопросы