2010-07-28 58 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;