2009-08-28 2 views
0

У меня возникла проблема, когда это заявление запроса дает мне повторение GoalText в результатах. Есть идеи?SQL Query возвращает повторяющуюся информацию

Полный оператор запроса:

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

Вы объединения двух таблиц вместе. Очевидно, что записи в первой таблице соответствуют более одной записи из второй таблицы. Когда это произойдет, запись из первой таблицы дублируется в наборе результатов для каждой записи во 2-й таблице, которая соответствует ей.

+0

Спасибо, что рассказали мне, что происходит. Любое предложение по исправлению моей проблемы? – NMan

+4

Это зависит от того, что вы пытаетесь показать? –

+2

Простой ответ - просто написать свое соединение, чтобы 1-я таблица соответствовала одному результату во 2-м. Но чтобы понять это правильно, нам нужно лучше понять, какие критерии должны определять именно ту строку, которая должна быть. –

1

Когда строка в первой таблице присоединяется к нескольким строкам во второй таблице, вы, по-видимому, только хотите, чтобы она отображалась один раз в выводе запроса. В этом случае строка WHICH из 2-й таблицы вы хотите показать в этой единственной строке вывода?

  • Введенная строка?
  • с наибольшей цельюId?
  • или что-то ...

Вы должны ответить на этот вопрос, прежде чем вы можете написать SQL запрос, чтобы делать то, что ваш ответ указывает ..

4

Re написал запрос, так что это более удобным для чтения, и оказывается subquerys (YUCK) в объединения:

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/etc, вы никогда не будете получать одиночные записи для целевого объекта, включая котировки.

+1

+1 для избежания подзапросов £! –