2016-11-01 2 views
-1

1-й таблицыMYSQL запрос выберите

GroupID MemberID Name 
    1  1  ---  
    1  23  ---  
    2  1  ---  
    2  23  ---  
    2  24  ---  
    3  1  ---  
    3  24  ---  

второй стол

ID MemberCount GroupName 
1  2   --- 
2  3   --- 
3  2   --- 

теперь я хочу

select the GroupID where MemberID = (1 and 23) and MemberCount = 2 

Я использую MySql и не могут использовать пересекаются, так как я могу сделать это

+1

'MemberId в (1,23)'? –

+0

нет, он будет выбирать группу id 1,2,3, потому что у всех есть 1 или 23 –

+0

. поэтому вам нужны пользователи с BOTH этих идентификаторов? тогда 'где член в (1,23) имеет счет (член) = 2', в основном. –

ответ

2
SELECT a.groupID 
FROM table1 a 
, table2 b 
WHERE b.id = a.groupID 
AND b.MemberCount = 2 
AND a.MemberId in (1,23) 
HAVING COUNT(DISTINCT(MemberId)) >= 2; 
+0

это возвращение 1,1,3, но мне нужно 1 –

+0

Неправильно я обновил ответ, попробуйте сейчас. –

0

Это должно сработать ... Я догадался об именах.

SELECT g.id 
FROM group g 
WHERE g.membercount = 2 
AND EXISTS (SELECT null FROM user_group ug WHERE ug.groupid = g.id AND ug.memberid = 1) 
AND EXISTS (SELECT null FROM user_group ug WHERE ug.groupid = g.id AND ug.memberid = 23) 
0
select GroupID from table1 inner join table2 on table1.GroupID=table2.ID where MemberCount=2 and MemberID in (1,23); 
+0

этот запрос возвращает только 1 –

+0

Оператор IN принимает список значений, разделенных запятыми, в вашем ответе «1 и 23» будут рассматриваться как выражение, которое приводит к ответу 1 - так что окончательная часть вашего запроса по существу " MemberID в (1) ". Это приводит к запросу, возвращающему как 1, так и 3 - не только 1. – PaulF

+0

Извините просто простую ошибку –

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