2017-05-01 12 views
0

두 개의 테이블이 있습니다. 첫 번째 테이블은 Project라는 기본 테이블이며, 프로젝트는 ID와 내가 찾고있는 유닛이 있습니다. 두 번째 테이블은 Project_ChecklistItems라는 브리지 테이블입니다. 이 테이블은 프로젝트를 ChecklistItems에 연결합니다. ChecklistItem에는 해당 Project.ID, 해당 Project.ID의 이름 및 상태가 있습니다.여러 매개 변수를 사용하여 다른 테이블과 일대 다 관계로 테이블을 쿼리하려면 어떻게해야합니까?

단위 및 점검 목록 상태로 검색해야합니다.

여러 개의 where 문을 가진 innerjoin 문을 고려하고 있습니다.

`SELECT * 
FROM dbo.Project 
INNER JOIN dbo.Project_ChecklistItem 
ON dbo.Project.ID = dbo.Project_ChecklistItem.ProjectID 
WHERE dbo.Project.Unit = 'Industrial' 
OR dbo.ECN.Division = 'Automotive' 
OR dbo.Project.Unit = 'SwivelChair' 
And dbo.Project_ChecklistItem.Status = 'Yes'' 

|Project ID | Unit | |ProjctID|ChecklistItemName|Status| 
| 105  | automotive | |105  | ASO   | No | 
|   |   | |105  | PR   | Yes | 
|   |   | |105  | SOP   | Yes | 

문제

내가 하나의 특정 Checklist_Item 이름 또는 ALL Checklist_Item 이름으로 검색 할 수 있어야한다는 것입니다. 이 절부터 아니므로 dbo.ECN.Division Where 절에 사용할 수 없습니다 -

+1

귀하의 질문이 이해가되지 않습니다 중 하나를 시도하십시오. 질문에는 두 개의 테이블 만 언급하지만 샘플 코드에는 적어도 세 개가 있습니다. 샘플 데이터와 원하는 결과가 매우 유용합니다. –

+1

그리고 where 술어가 문제가있는 것 같습니다. OR 및 AND가 있지만 괄호는 없습니다. –

+1

문제점 설명을 수정하고 테이블 모델을 추가했습니다. –

답변

0

당신은 절

첫째는 문제가있다. 이 나머지 부분에 대해서는 실제로 Project.Unit이라고 가정합니다.

대괄호를 사용하지 않고 Where 절에 절 (AND 및 OR)을 섞으면 거의 의도하지 않은 것으로 끝납니다. 당신이 실제로 원하는 것은 Project.Unit이 (Industrial, Automotive, Swivelchair) 중 하나이고 Status가 yes 인 모든 레코드입니다.하지만 당신이 가지고있는 것은 다음 중 하나와 일치하는 모든 레코드입니다 (Industrial - status 관련 없음), (자동차 - 관련 없음) 또는 (회전 의자 및 상태는 예이어야 함).

는 다음 절

WHERE 
(dbo.Project.Unit = 'Industrial' 
    OR dbo.Project.Unit = 'Automotive' 
    OR dbo.Project.Unit = 'SwivelChair' 
) 
And dbo.Project_ChecklistItem.Status = 'Yes' 

또는

WHERE dbo.Project.Unit IN ('Industrial', 'Automotive', 'SwivelChair') 
And dbo.Project_ChecklistItem.Status = 'Yes'