2014-01-13 3 views
0

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

id | user_id | thread_id 
1 | 1  | 1 
2 | 4  | 1 
3 | 1  | 2 
4 | 3  | 2 

Я пытаюсь извлечь thread_id где user_id = 1 и 4. Я знаю, что делает in(1,4) не соответствует моим потребностям, так как его довольно OR и вытащит рекорд 3, а Exists возвращает только bool.

ответ

0

Вы можете использовать JOIN (этот ответ уже существует) или HAVING, как это:

SELECT 
    thread_id, 
    COUNT(1) AS user_count 
FROM 
    t 
WHERE 
    user_id IN (1,4) 
GROUP BY 
    thread_id 
HAVING 
    user_count=2 

-check demo. HAVING подойдет лучше в случае многих идентификаторов (потому что с JOIN вам нужно будет присоединиться столько раз, сколько у вас есть). Однако это немного сложно: вы можете сделать сравнение =, только если ваши записи уникальны за (user_id, thread_id); например, ваш user_id может повторить, затем используйте >=, как в этом demo.

+0

спасибо !!! Я пытался избежать использования Joins. – shayward

0

Попробуйте это присоединиться, я думаю, что вам нужно сделать операцию И с user_id должно быть 4 и 1, то

SELECT 
    t1.thread_id 
FROM 
    TABLE t1 
    JOIN TABLE t2 
    ON (t1.user_id = t2.user_id) 
WHERE t1.user_id = 1 
    AND t2.user_id = 4 
Смежные вопросы