2010-07-28 94 views
0

我知道我必須在這裏失去了一些東西簡單...但我在與編寫SQL查詢的子問題。鑑於以下數據問題與編寫SQL查詢子

user_id question_id answer_text 
89   1   value1 
89   2   value2 
80   2   value2 
99   2   value2 
96   1   value1 
96   2   value2 
111  1   value1 
111  2   value2 

我需要得到USER_ID的同時具有question_id 1 =「值1」,並有question_id 2 =「值」

上述結果與使用該查詢生成:

SELECT `User_answer`.`user_id`, `User_answer`.`question_id`, `User_answer`.`answer_text` FROM `user_answers` AS `User_answer` WHERE `User_answer`.`question_id` IN (1, 2) AND `User_answer`.`answer_text` IN ('value1', 'value2') 

當然它返回有一個完全不同的答案不是「值2」(反之亦然)回答問題1「值1」,但問題2的用戶,但。

我需要能夠添加更多的條件,但我想我可以補充說,如果我至少可以得到這兩個工作。

回答

0

一種方法是使用自連接,如

select a1.user_id, a1.answer_text AS Answer1, a2.answer_text AS Answer2 
from user_answers a1 join user_answers a2 on a1.userid=a2.userid and a1.question_id=1  and a2.question_id=2 
where a1.answer_text <> a2.answer_text 

對不起,如果語法是有點過(這已經有一段時間,因爲我用的MySQL),但你的想法。

0

我會使用內做到這一點加入這樣的:

SELECT 
    user_id 
FROM 
    user_answers AS a1 
    INNER JOIN user_answers AS a2 ON 
    a2.user_id = a1.user_id 
    AND a2.question_id=2 
    AND a2.answer_text='value2' 
WHERE 
    a1.question_id=1 
    AND a1.answer_text='value1' 

翻譯爲:

  1. 查找爲1的question_id和ANSWER_TEXT 'VALUE1'
  2. 對於這些所有的答案答案,找到相同的答案,具有相同的用戶ID和question_id 2以及'value2'的answer_text。
  3. 做一個內部連接,即扔掉那些不滿足兩者。
0

我想嘗試做無子查詢,像這樣:

SELECT `User_answer`.`user_id`, 
    MAX(CASE `User_answer`.`question_id` WHEN 1 THEN `User_answer`.`answer_text` END) AS `q1_answer`, 
    MAX(CASE `User_answer`.`question_id` WHEN 2 THEN `User_answer`.`answer_text` END) AS `q2_answer` 
FROM `user_answers` AS `User_answer` 
WHERE (`User_answer`.`question_id` = 1 AND `User_answer`.`answer_text` = 'value1') 
    OR (`User_answer`.`question_id` = 2 AND `User_answer`.`answer_text` = 'value2') 
GROUP BY `User_answer`.`user_id` 
HAVING COUNT(DISTINCT `User_answer`.`question_id`) = 2;