2009-08-28 208 views
0

我遇到了這個查詢語句讓我在結果中重複GoalText的問題。有任何想法嗎?返回重複信息的SQL查詢

完整的查詢語句:

Select g.GoalText, convert(nvarchar, g.GoalID) + '|' + convert(nvarchar, r.GoalReqID) as GoalID, GoalReqID 
from Goal g inner join GoalRequirement r 
on g.GoalID = r.GoalID 
where GoalReqID in 
    (Select GoalReqID 
    from GoalRequirement r inner join SurveyAnswer a 
    on r.QuestionID = a.QuestionID and ReqQuestionValue = SurveyAnswer 
    where a.CycleID = 93 and ReqBMILevel is null 
    and ReqEnergyBalance is null and SurveyAnswer = 1 and r.QuestionID in 
    (Select QuestionID from Question where QuestionParent = 6000));

結果:

GoalText GoalID GoalReqID 
Choose lasagna, ravioli, stuffed pasta 1-3 times a week instead of 4 or more times a week. 13|442 442 
Choose macaroni and cheese 1-3 times a week instead of 4 or more times a week. 14|443 443 
Choose meats in gravies- beef stew, chicken pot pie,… 1-3 times a week instead of 4 or more times a week. 15|444 444 
Choose spaghetti, meat sauce and/or meatballs, 1-3 times a week instead of 4 or more times a week. 16|445 445 
Choose tacos, burritos, enchiladas, nachos with meat and/or cheese 1-3 times a week instead of 4 or more times a week. 17|446 446 
Choose biscuits and sausage gravy 1-3 times a week instead of 4 or more times a week. 102|482 482 
Choose pizza- all types and calzones 1-3 times a week instead of 4 or more times a week. 12|483 483 
Choose hamburger/tuna/chicken noodle casseroles (includes 「Helper」) 1-3 times a week instead of 4 or more times a week. 130|484 484 
Choose lasagna, ravioli, stuffed pasta 1-3 times a week instead of 4 or more times a week. 13|485 485 
Choose macaroni and cheese 1-3 times a week instead of 4 or more times a week. 14|486 486 
Choose meats in gravies- beef stew, chicken pot pie,… 1-3 times a week instead of 4 or more times a week. 15|487 487 
Choose spaghetti- marinara sauce only, 1-3 times a week instead of 4 or more times a week. 132|488 488 
Choose spaghetti, meat sauce and/or meatballs, 1-3 times a week instead of 4 or more times a week. 16|489 489 
Choose tacos, burritos, enchiladas, nachos with meat and/or cheese 1-3 times a week instead of 4 or more times a week. 17|490 490

各個查詢組成的查詢:

Select g.GoalText, convert(nvarchar, g.GoalID) + '|' + convert(nvarchar, r.GoalReqID) as GoalID, GoalReqID 
from Goal g inner join GoalRequirement r 
on g.GoalID = r.GoalID

結果:共有444條記錄在此查詢,但你應該明白。

GoalText GoalID GoalReqID 
Eat an additional 400-500 calories per day. 1|1 1 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|2 2 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|106 106 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|144 144 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|182 182 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|219 219 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|256 256 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|293 293 
Choose fried potatoes, French fries, hash browns, potato salad 1-3 times a week instead of 4 or more times a week. 2|330 330 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|331 331 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|294 294 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|257 257 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|220 220 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|183 183 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|145 145 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|107 107 
Choose canned fruit, in heavy syrup, 1-3 times a week instead of 4 or more times a week. 3|3 3 
Choose lower fat milk (nonfat, skim, 1%, 2%) instead of whole milk. 4|4 4 
Choose lower fat milk (nonfat, skim, 1%, 2%) instead of whole milk. 4|108 108 
Choose lower fat milk (nonfat, skim, 1%, 2%) instead of whole milk. 4|146 146 
Choose lower fat milk (nonfat, skim, 1%, 2%) instead of whole milk. 4|184 184 
Choose lower fat milk (nonfat, skim, 1%, 2%) instead of whole milk. 4|221 221
Select GoalReqID 
    from GoalRequirement r inner join SurveyAnswer a 
    on r.QuestionID = a.QuestionID and ReqQuestionValue = SurveyAnswer 
    where a.CycleID = 93 and ReqBMILevel is null 
    and ReqEnergyBalance is null and SurveyAnswer = 1

結果:

GoalReqID 
478 
479 
480 
481 
482 
440 
441 
483 
484 
485 
442 
443 
486 
487 
444 
488 
489 
445
Select QuestionID from Question where QuestionParent = 6000

結果:

QuestionID 
6000 
6001 
6002 
6003 
6004 
6005 
6006 
6007 
6008 
6009

回答

7

你將兩個表連接在一起。顯然,第一個表中的記錄匹配第二個表中的多個記錄。發生這種情況時,來自第一個表的記錄會在第二個表中匹配的每個記錄的結果集中重複。

+0

感謝您告訴我發生了什麼事。任何解決我的問題的建議? – NMan 2009-08-28 14:55:55

+4

這取決於:你想展示什麼? – 2009-08-28 14:56:28

+2

簡單的答案是隻寫入你的連接,以便第一個表只匹配第二個中的一個結果。但爲了做到這一點,我們需要更好地理解什麼標準應該確切地定義應該是哪一行。 – 2009-08-28 15:03:31

1

當第一個表中的行連接到第二個表中的多個行時,您顯然只希望它在查詢輸出中顯示一次。在這種情況下,你想在這個單一輸出行中顯示第二個表中的WHICH行嗎?

  • 最後一行輸入?
  • 最大的目標是?
  • 或任何...

你需要回答這個問題之前,你可以寫一個SQL查詢做任何你的答案指定..

4

重新寫你的查詢,使其更具可讀性,並原來subquerys(呸)到聯接:

SELECT g.goaltext 
     g.goalid, 
     gr.goalreqid 
    FROM GOAL g 
    JOIN GOALREQUIREMENT gr ON gr.goalid = g.goalid AND gr.reqbmilevel IS NULL AND gr.reqenergybalance IS NULL 
    JOIN JOIN SURVEYANSWER sa ON sa.questionid = gr.questionid AND sa.surveyanswer = gr.reqquestionvalue AND sa.surveyanswer = 1 
    JOIN QUESTION q ON q.questionid = gr.questionid 
WHERE sa.cycleid = 93 

這是goalid和/或goalreqid柱(s)表示,導致排出來複製。因爲goaltext列與多個goalid/etc關聯,所以在包含goalids時,您永遠不會獲得goaltext的單個條目。

+1

+1用於避免子查詢£! – 2009-08-28 15:34:05