我遇到一个问题,这个查询语句让我在结果中重复使用GoalText。有什么想法吗?
完整的查询语句:
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
答案 0 :(得分:7)
答案 1 :(得分:4)
重新编写了您的查询,使其更具可读性,并将subquerys(yuck)变为JOIN:
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列。因为goaltext列与多个goalid / etcs相关联,所以在包含goalid时,你永远不会获得goaltext的单个条目。
答案 2 :(得分:1)
当第一个表中的一行连接到第二个表中的多个行时,您显然只希望它在查询输出中显示一次。在那种情况下,你希望在这个单个输出行显示第二个表中的WHICH行吗?
在编写SQL查询以执行答案指定之前,您需要回答此问题。