2014-02-13 5 views
2

В этой таблице перечислены пользователем и пункт идентификаторамиобщие ценности б/ш полей

user_id   item_id 
1    1 
1    2 
1    3 
2    1 
2    3 
3    1 
3    4 
3    3 

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

Моя догадка заключается в том, что для этого потребуется самостоятельное присоединение, но я не уверен.

я пытаюсь это quering, но это возвращается ошибка

SELECT * 
FROM recs 1 
JOIN recs 2 ON 2.user_id='2' AND 2.item_id=1.item_id 
WHERE 1.user_id='1' 
+0

Это помогает, если вам также включить ошибку, которую вы получаете в вопросе. : p – neminem

ответ

3

Попробуйте использовать имена псевдонимов, которые начинаются в письме:

SELECT * 
FROM recs r1 
JOIN recs r2 ON r2.user_id='2' AND r2.item_id=r1.item_id 
WHERE r1.user_id='1' 

Это возвращает

user_id item_id 
------- ------- 
     1  1 
     1  3 

для ваших данных , Demo on sqlfiddle.

Примечание. Я сохранял одинарные кавычки в запросе, так как я предполагаю, что оба идентификатора в вашей таблице имеют тип символа. Если это не так, удалите одинарные кавычки вокруг значений идентификатора пользователя '1' и '2'.

Я хочу это для п число пользователей ... А я хочу, чтобы запрос, чтобы вернуть все ITEM_ID годов, которые распространены среди пользователей

SELECT DISTINCT(r1.item_id) 
FROM recs r1 
WHERE EXISTS (
    SELECT * 
    FROM recs r2 
    WHERE r2.item_id=r1.item_id 
    AND r1.user_id <> r2.user_id 
) 

Demo #2.

+0

Большое спасибо ... но я хочу его для n числа пользователей ... я хочу, чтобы запрос возвращал все item_id, которые являются обычными ч/б пользователями. – user3307121

+0

@ user3307121 Взгляните на обновление. – dasblinkenlight

+0

запрос я использовал SELECT DISTINCT (r1.item_id) ОТ РИК r1 , где существует ( SELECT * ОТ РИК r2 ГДЕ r2.item_id = r1.item_id И r1.user_id! = R2.user_id и r2 .item_id! = '1' ) – user3307121

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