2011-09-26 2 views
0

양식에 새로운 질문을 쉽게 추가 할 수있는 취업 응용 프로그램의 확장을 구축했습니다. 그들은 어떤 애플리케이션에 적용했는지, 그리고 어떤 애플리케이션 ID인지를 비교하기 위해 쿼리를해야한다. 답변과 질문을 모두 반환해야합니다. 문제는 둘 다 정의 된 경우 모두 반환되지만 응용 프로그램이 정의되지 않은 경우에도 질문을 반환해야하지만 현재는 대답이 정의되어 있는지 질문하십시오.SQL 문이 일치하지 않는 경우에도 SQL이 데이터를 반환해야합니다.

도와주세요!

코드 : (즉, 어디는 ColdFusion에서 변수를 사용하는 일반 밖으로 그래서 아무것도 참고하지 않음) 아래

SELECT  
     dbo.mod_employmentAppQuestionAnswers.questionID 
     ,dbo.mod_employmentAppQuestionAnswers.questionDefinitionID 
     ,dbo.mod_employmentAppQuestionAnswers.AppID 
     ,dbo.mod_employmentAppQuestionAnswers.questionText 
     ,dbo.mod_employmentAppQuestionAnswers.questionDate1 
     ,dbo.mod_employmentAppQuestionAnswers.questionDate2 
     ,dbo.mod_employmentAppQuestionAnswers.questionBit 
     ,dbo.mod_employmentAppQuestionDefinitions.definitionID 
     ,dbo.mod_employmentAppQuestionDefinitions.jobTitleID 
     ,dbo.mod_employmentAppQuestionDefinitions.title AS QuestionTitle 
     ,dbo.mod_employmentAppQuestionDefinitions.questionTypeID 
     ,dbo.mod_employmentAppQuestionDefinitions.description 
     ,dbo.mod_employmentAppQuestionDefinitions.isActive 
     ,dbo.mod_employmentAppJobTitles.title AS JobTitle 
     ,dbo.mod_employmentAppQuestionTypes.type AS QuestionType  
    FROM dbo.mod_employmentAppQuestionAnswers 
     FULL JOIN dbo.mod_employmentAppQuestionDefinitions 
      ON dbo.mod_employmentAppQuestionAnswers.questionDefinitionID = dbo.mod_employmentAppQuestionDefinitions.definitionID 
     INNER JOIN dbo.mod_employmentAppJobTitles 
      ON dbo.mod_employmentAppQuestionDefinitions.jobTitleID = dbo.mod_employmentAppJobTitles.jobTitleID 
     LEFT JOIN dbo.mod_employmentAppQuestionTypes 
      ON dbo.mod_employmentAppQuestionDefinitions.questionTypeID = dbo.mod_employmentAppQuestionTypes.questionTypeID 
    WHERE 
     (dbo.mod_employmentAppQuestionDefinitions.jobTitleID = 
       <cfqueryparam cfsqltype="cf_sql_integer" value="#jobTitleID#" />) AND 
     (dbo.mod_employmentAppQuestionAnswers.AppID = 
       <cfqueryparam cfsqltype="cf_sql_integer" value="#applicationID#" />) 

데이터베이스 설계 : Database design

답변

3

나는 왼쪽에서 사용할 것입니다. 더 나은 결과를 얻으려는 시도 이외에 의도적으로 FULL JOIN을 사용했는지 확신 할 수 없습니까? 또한 조인의 테이블에 별칭을 사용하는 방법을 배우십시오. 코드를 읽어야하는 사람들은 감사 할 것입니다. 약속드립니다.

SELECT  
    a.questionID 
    ,a.questionDefinitionID 
    ,a.AppID 
    ,a.questionText 
    ,a.questionDate1 
    ,a.questionDate2 
    ,a.questionBit 
    ,d.definitionID 
    ,d.jobTitleID 
    ,d.title AS QuestionTitle 
    ,d.questionTypeID 
    ,d.description 
    ,d.isActive 
    ,t.title AS JobTitle 
    ,qt.type AS QuestionType  
FROM 
    dbo.mod_employmentAppQuestionDefinitions AS d 
LEFT OUTER JOIN 
    dbo.mod_employmentAppQuestionAnswers AS a 
    ON a.questionDefinitionID = d.definitionID 
    AND a.AppID = <cfqueryparam cfsqltype="cf_sql_integer" value="#applicationID#" /> 
LEFT OUTER JOIN 
    dbo.mod_employmentAppJobTitles AS t 
    ON d.jobTitleID = t.jobTitleID 
LEFT OUTER JOIN 
    dbo.mod_employmentAppQuestionTypes AS qt 
    ON d.questionTypeID = qt.questionTypeID 
WHERE 
    d.jobTitleID = <cfqueryparam cfsqltype="cf_sql_integer" value="#jobTitleID#" /> 
+0

중복이 없으면 별칭을 사용하지 않아도되는 스타일 요구 사항이지만 도움을 많이 주셔서 감사합니다. 위대한 작품! –

+0

재미 있습니다. 테이블 별칭을 사용하지 않고 그 이유를 공유 할 수 있습니까? 여러분은 많이 입력 하시겠습니까? –

-1

단순히 당신이이 외부 조인 왼쪽으로 사용하려면 ..

+0

조인은? –

관련 문제