2012-03-01 2 views
1

이 답변은 극도로 간단 할 것입니다. 이전에이 문제를 해결했지만 어떤 이유로이 작업을 한 시간 동안 계속했습니다.SQL Inner Join 잘못된 결과 제공

SELECT table1.FIELD1, table2.sum(FIELD2), table3.sum(FIELD3) 
FROM (table1 INNER JOIN table2 ON table1.JOBINSTID = table2.JOBINSTID) 
    INNER JOIN table3 ON table1.JOBINSTID = table3.JOBINSTID 
GROUP BY FIELD1; 

결과 그것을 반환 완전히 제정신 것을 :

나는 다음과 같은 쿼리를 가지고있다. Field2의 실제 합계를주는 대신 WAYYY 수치가 더 높아집니다. 나는 이것이 왜 일어나고 있는지 약간 이해하지만 나는 그것을 고치는 법을 모른다. 정확한 합계를 얻을 수 있도록이 쿼리를 어떻게 변경합니까?

편집 : JOBINSTID은 표 1과 2에 고유 ID이지만 this.It 작업을해야하지 않으려 3.

답변

1

이 표를 포함하는 단지 대일 문제가 있다면, 당신이 이것을 할 수 있습니다 :

SELECT 
    table2.FIELD1, 
    SUM(table3.FIELD2) 
FROM table2 JOIN table3 
ON table3.JOBINST_ID = table2.JOBINSTID 
WHERE EXISTS (
    SELECT * FROM table1 
    WHERE table1.JOBINSTID = table2.JOBINSTID 
    -- AND table1.JOBINSTID = table3.JOBINST_ID -- redundant, but might improve runtime 
) 
GROUP BY table2.FIELD1; 

을 문제가 표 2와 표 3 사이에 (도) 인 경우, 당신은 당신의 데이터베이스가 얼마나 다시 생각해야 할 수도 있습니다 정규화,하지만 당신은 어떤 경우에 작동합니다 내가 생각하는이를 시도 할 수 :

SELECT -- DISTINCT -- add DISTINCT if FIELD1 values are not unique in table2 
    table2.FIELD1, 
    (
    SELECT SUM(FIELD2) FROM table3 
    WHERE table3.JOBINST_ID = table2.JOBINSTID 
) 
FROM table2 
WHERE EXISTS (
    SELECT * FROM table1 
    WHERE table1.JOBINSTID = table2.JOBINSTID 
) 

당신이 말한 당신이 설명하지 않았기 때문에 관계가 1-있는, 그것은, 당신이 원하는 것을 말할 어렵다 감안할 때 1이고 many-1이거나 어떤 열이 어떤 테이블에서 고유한지 표시됩니다.

+0

미안하지만, 나는 고의적으로 단순하게 유지하려고 노력했고 일부 세부 사항을 남겼다. JOBINSTID는 표 1과 2에서는 고유하지만 표 3에서는 고유하지 않습니다.이를 반영하기 위해 OP를 편집했습니다. – Kittoes0124

0

표에.

SELECT FIELD1, sum(FIELD2) 
FROM table1 t1,table2 t2,table t3 
WHERE.t1.JOBINSTID = t2.JOBINSTID 
AND t1.JOBINSTID = t3.JOBINST_ID 
GROUP BY FIELD1; 

추신 : SELECT CLAUSE에서 사용중인 테이블의 FIELD1, FIELD2에 별명을 지정하십시오.

+0

그래, 그 괄호도 나를 걱정했다. 나는 그들이 어떤 영향력을 가지고 있다고 생각하지 않지만, 그런 식으로 코딩하지 않는다. 그래서 누가 알 수 있을까? –

+0

이 쿼리는 구문 적으로 작동하지만 Kittoes는 추측 할만한 다른 o/p를 필요로 할 수도 있습니다 .. – Teja

+0

코드 없이는 괄호가 액세스 요구 사항이라고 생각합니다. – Kittoes0124

0

어떤 테이블이 FIELD2입니까? 추측 : 아마도 FIELD2의 개별 인스턴스를 합산하려고하지만 데이터 내에 일대 다 관계로 인해 각각 FIELD2의 여러 인스턴스를 얻는 쿼리/데이터가있을 수 있습니다. 그렇다면 수정은 쿼리를 수정하여 FIELD2의 중복을 제외하는 것입니다.

+0

당신 말이 맞습니다. 문제는 여러 인스턴스를 가져오고 있으며이를 위젯으로 수정하는 방법을 모르겠습니다. – Kittoes0124