하는

2011-07-31 3 views
3

가 나는 특정 값을 얻기 위해 함께 연결해야 할 몇 테이블이 조인, 여기하는

SELECT DISTINCT bu.Email,iv.Code,ex.ExNumber 
FROM Invoices AS iv 
INNER JOIN Clients AS cs 
ON iv.Code = cs.Code 
INNER JOIN BusinessUser_ExNumbers AS ex 
ON cs.ExNumber = ex.ExNumber 
INNER JOIN BusinessUsers AS bu 
ON ex.Userid = bu.Id 
WHERE iv.BatchId = '74b43669-c80f-4b44-999c-a1dfe5695844' // Test value 

기본적으로 내 송장에 대한 링크가 송장에서 개최되는 내 현재 쿼리입니다 테이블, 그리고 내가해야 할 일은 인보이스의 수신자로 지정된 사용자에게 링크를 보내는 것입니다. 코드는 작동하지만 '별다른'것이 아닙니다. 나는 다른 행과 같은 이메일과 exnumber를 가진 행을 원하지 않는다. 불행히도 하나 이상의 iv.Code 특정 사용자에게 연결을 끝내면 여러 행을 가져옵니다. 나는 이것이 왜 일어나는 지 이해하지만 그렇게하지 못하게하는 방법을 생각할 수 없다.

감사합니다.

편집 : 정말 미안 해요. 나는 iv.Code를 선택할 필요가 없었고 이것이 문제의 원인이었습니다. 아마 그것이별로 의미가없는 이유 일 것입니다. 어쨌든 내가 질문을 게시 한 이후에 마틴 스미스가 아래 답변을 시도 했으므로 문제가 해결됩니다. iv.Code가 필요하지 않은 경우 제거하면됩니다.

+0

그래서 여러 개의 이벤트가있을 경우'iv.Code'가 반환되어야합니까? –

+0

나는 마틴에 동의한다 : 복제물을 제거하기 위해서는 * MAX 기준이나 다른 기준을 사용해야한다. 거기에 복합 JOIN이 있습니까? 예를 들어 2 가지 조건에 JOIN 할 수 있습니까? 어쩌면 테이블 구조도 추가 할 것입니다 ... – gbn

+0

죄송합니다. 위의 편집에서 내 잘못을 설명했습니다. –

답변

1

다음은 특정 Email, Number 조합에 대해 복수가있는 경우 MAX 코드를 반환합니다.

SELECT bu.Email, 
     MAX(iv.Code) AS Code, 
     ex.ExNumber 
FROM Invoices AS iv 
     INNER JOIN Clients AS cs 
     ON iv.Code = cs.Code 
     INNER JOIN BusinessUser_ExNumbers AS ex 
     ON cs.ExNumber = ex.ExNumber 
     INNER JOIN BusinessUsers AS bu 
     ON ex.Userid = bu.Id 
WHERE iv.BatchId = '74b43669-c80f-4b44-999c-a1dfe5695844' 
GROUP BY bu.Email, 
      ex.ExNumber 
+0

고마워요! –