SQL包括SELECT语句中的重复项

时间:2012-04-17 17:34:50

标签: sql

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

然后将国家/地区ID与其user_id

一起保存到答案表中

我正在尝试编写一个查询,它将获取他们选择的所有国家/地区名称作为答案,(然后我将在我的Java应用程序中设置8个标签的文本,以便用户可以看到他们选择的8个国家/地区他们的答案)

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

这是我的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' 

我确定我可能错过了一些相当容易的东西,但任何帮助都会非常适合

也很抱歉,如果我的问题没有充分理解我很乐意回答你可能有的任何问题

感谢

1 个答案:

答案 0 :(得分: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
)