2012-12-05 131 views
3

我有一個項目,我只需要選擇以某種方式(基於過濾器)回答某些問題的用戶。mysql匹配多行時選擇

過濾器表(過濾器)看起來像這樣

question | answer 

    Q1  | A 
    Q2  | B 

用戶表(答案)看起來像這樣

user | question | answer 

    1 | Q1 | A 
    1 | Q2 | D 
    2 | Q1 | A 
    2 | Q2 | B 

如何從用戶表中只選擇與過濾器相匹配的用戶?
我試圖

"SELECT user FROM answers WHERE (question = Q1 AND answer = A) 
      AND (question = Q2 AND answer = B)" 

和它不工作 - 我得到一個空的結果。謝謝。

回答

1

試試這個

select answers.user 
from filter, answers 
where filter.question=answers.question and filter.answer=answers.answer 
group by answers.user having count(answers.question)=2 

select user 
from answers 
where user not in 
(select distinct a.user from answers a, filter f 
where a.question=f.question and a.answer!=f.answer) 
+0

您的解決方案都可以工作。很棒的工作,感謝您花時間。現在我已經看到哪種解決方案最快。 – user1735943

2

試試這個:

Select 
DISTINCT(userId) 
from user_table ut 
inner join filtertable ft on (ut.question=ft.question and ut.answer=ft.answer) 
+0

我打算寫幾乎相同的連接條件相同的查詢,但OP只想選擇answer.user。 –

+0

要做到這一點,他需要選擇不同的ID –

+0

已更新,請檢查 –

3

在你查詢你所要求得到這是不存在的數據。您正試圖獲得具有這兩種組合的用戶。

試試這個

SELECT user FROM answers WHERE (question = 'Q1' AND answer = 'A') 
     OR (question = 'Q2' AND answer = 'B') 
+0

是的,它存在。我需要回答A到Q1和B到Q2的用戶來匹配過濾器。你提出的建議只會考慮一對問題/答案,而不是兩者。 – user1735943