2012-04-17 61 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