2012-04-17 43 views
2

简要概述,所以这是在上下文中,我有一个应用程序在Java中使用SQL作为数据库中的应用程序用户必须选择8个国家作为问题的答案(这些国家可能会被挑选不止一次,例如,澳大利亚可能是他们的Q1和Q3)SQL在SELECT语句中包含重复项

国家ID,然后保存到他们的答案表沿着他们的user_id答案

我想写一个查询,将得到所有的国家名称,他们选择作为他们的答案,(我将然后设置我的Java应用程序中的8个标签的文本,以便用户可以看到他们选择的8个国家作为他们的答案)

我对SQL连接等没有问题,我写的查询确实会拉出正确的信息,但是如果有人用相同的答案(国家)回答了多个问题,那么它只返回国家名称是答案(所以基本上我想要返回8,但如果同一个国家被选中两次,它只返回7)与此问题是,不同的用户可以有同一个国家回答不同的问题,所以我不能简单地使用返回的答案,并设置2个标签的值从一在查询(我希望是有道理的)

这里返回的行是我的SQL

SELECT C.C_NAME 
FROM COUNTRY C INNER JOIN 
TBL_ANSWERS T ON 
T.ANSWER1_ID = C.C_ID 
OR 
T.ANSWER2_ID = C.C_ID 
OR 
T.ANSWER3_ID = C.C_ID 
OR 
T.ANSWER4_ID = C.C_ID 
OR 
T.ANSWER5_ID = C.C_ID 
OR 
T.ANSWER6_ID = C.C_ID 
OR 
T.ANSWER7_ID = C.C_ID 
OR 
T.ANSWER8_ID = C.C_ID 
WHERE T.USER_ID = '4' 

我敢肯定,有可能是一些很简单的我已经错过了,但任何帮助将大大appriciated

也对不起,如果我的问题didnt完全意义生病很乐意回答任何问题,你可能有

感谢

+4

3个月,9个问题,没有投票,没有接受的答案。在寻求进一步的帮助之前,请考虑改进您的反馈 - 人们会更倾向于提供帮助。 – JNK 2012-04-17 17:38:41

+0

@JNK +1为已接受的答案,但目前他没有足够的代表upvote。 – 2012-04-17 17:41:43

+0

@MichaelFredrickson @MichaelFredrickson如果他接受一些答案,他可以:) – JNK 2012-04-17 17:43:08

回答

1

好像你只是想这样的事情:

SELECT C_NAME, AnswerNum 
FROM 
(
SELECT C.C_NAME, "1" AS AnswerNum, T.USER_ID 
FROM COUNTRY C 
    JOIN TBL_ANSWERS T 
     ON T.ANSWER1_ID = C.C_ID 
UNION ALL 
SELECT C.C_NAME, "2" AS AnswerNum, T.USER_ID 
FROM COUNTRY C 
    JOIN TBL_ANSWERS T 
     ON T.ANSWER2_ID = C.C_ID 
... 
UNION ALL 
SELECT C.C_NAME, "8" AS AnswerNum, T.USER_ID 
FROM COUNTRY C 
    JOIN TBL_ANSWERS T 
     ON T.ANSWER8_ID = C.C_ID 
) AS AnswersJoined 
WHERE USER_ID = '4' 

然而,我会认真考虑,让你使用关系映射返工你的表表格来找出问题和答案。这将允许这在一个查询

喜欢的东西

Tbl_Answer可以更容易地创建

Question_Id|User_Id|Response_Id 

Tbl_Question

Id|QuestionNumber 

这将使你只运行一个简单的BETWEEN。类似这样的:

SELECT C.Name 
FROM Country C 
WHERE EXISTS 
(
    SELECT 1 
    FROM Tbl_Answer T 
     JOIN Tbl_Question Q 
      ON Q.Id = T.Question_Id 
    WHERE T.User_Id = 4 AND T.Response_Id = C.C_ID 
     AND Q.QuestionNumber BETWEEN 1 AND 8 
) 
+0

欢呼声,工会都是我正在寻找的东西,谢谢在桌子上的建议,不得不看看那个! – AngryDuck 2012-04-18 12:40:33