2014-11-24 3 views
1

3 개의 테이블이 있습니다. 하나는 사용자 이름, 하나는 데이터 묶음, 다른 하나는 ID를 통해 2 개의 테이블을 연결하는 이름입니다. 내가 INNER JOIN과 3을 결합하려고 시도 할 때, 나는 많은 행을 얻는다. 예를 들어, 데이터 테이블에 2000 개의 행만있는 경우, 내부 조인을 사용하여 3 개의 테이블을 연결하면 100,000 개의 행이 출력됩니다. 내 데이터 테이블에 내 사용자 이름 테이블보다 많은 행이 있고 내부 조인이 제대로 실행되지 않는다는 사실과 관련이 있습니까? 다른 테이블보다 많은 행을 가진 테이블을 내부 조인 할 수 있습니까? 두 개의 개별 항목에 대해, 존 스미스가 두 번 나열됩니다 볼 수 있듯이INNER JOIN을 사용할 때 중복 결과 얻기

-Names-----------Numbers-----------Item---------------Cost--- 
John Smith  111-1111   Pencils   100.75 
Joe Stevens  222-2222   Paper    35.34 
Mike Jones  333-3333   Staples   23.86 
John Smith  111-1111   Boxes    11.76 

:이 데이터베이스의 CLEARITY

에 대한

편집은 내가 이렇게 보이는 데이터를 가져옵니다. 나는 이것을 최적화하고 싶지만 원래의 데이터를 분리하고 하나의 반복으로 자신의 테이블에 것들을 넣고 싶습니다.

ID---Name---   ID----Numbers   ID---Items------Cost 
    1 John Smith  1 111-1111   1 Pencil  100.75 
    2 Joe Stevens  2 222-2222   2 Paper  35.34 
    3 Mike Jones  3 333-3333   3 Staples 23.86 
                4 Boxes  11.76 

이제 모든 것이 최적화되었으므로 필자는 John Smith와 연필 및 상자를 모두 사용할 수있는 쿼리를 실행할 수 있어야합니다. 나는 그들이에있을 필요가 올바른 순서 ID를 보유하고 링크 테이블을 만든 이유입니다. 이제

  Name.ID   Number.ID  Item.ID 
      1     1    1 
      2     2    2 
      3     3    3 
      1     1    4 

내가 원래 데이터 덤프를 재현 보고서를 실행하기를 원한다면, 내가 쿼리를 실행할 것이라고 내부 조인으로 3 개의 테이블을 조인합니다. 그러나 문제는 단순히 데이터를 출력해야하는 대신 많은 수의 중복 된 결과를 얻고 있다는 것입니다. 나는 이런 식으로 뭔가를 얻을 :

-Names-----------Numbers-----------Item---------------Cost--- 
John Smith  111-1111   Pencils   100.75 
John Smith  111-1111   Pencils   100.75 
John Smith  111-1111   Pencils   100.75 
John Smith  111-1111   Pencils   100.75 
John Smith  111-1111   Pencils   100.75 
Joe Stevens  222-2222   Paper    35.34 
Joe Stevens  222-2222   Paper    35.34 
Joe Stevens  222-2222   Paper    35.34 
Joe Stevens  222-2222   Paper    35.34 
Mike Jones  333-3333   Staples   23.86 
Mike Jones  333-3333   Staples   23.86 
Mike Jones  333-3333   Staples   23.86 
Mike Jones  333-3333   Staples   23.86 
John Smith  111-1111   Boxes    11.76 
John Smith  111-1111   Boxes    11.76 
John Smith  111-1111   Boxes    11.76 
John Smith  111-1111   Boxes    11.76 

원하는 출력은 단순히 다음과 같습니다

-Names-----------Numbers-----------Item---------------Cost--- 
John Smith  111-1111   Pencils   100.75 
Joe Stevens  222-2222   Paper    35.34 
Mike Jones  333-3333   Staples   23.86 
John Smith  111-1111   Boxes    11.76 
+0

을 시도합니다. 접합부 테이블은 하나 이상의 레코드가 다른 수의 레코드와 연관 될 수 있도록 설계 되었기 때문에 두 개의 이름은 각각 10 개의 2 x 10 레코드와 같은 데이터를 가질 수 있습니다. – Fionnuala

+0

흠, 그래서 당신이 물건을 서로 연결하는 대신 말하고 있는데, 그들은 곱해지고 있습니까? –

+0

아니요, 각 이름에 유효한 데이터가 두 개 이상 있습니다. – Fionnuala

답변

0

당신이 접합 테이블이 보인다이 하나

Select Distinct t1.Names,t2.Number,t3.Item,t3.Cost 
From 
tableName t1 
inner join tableNum t2 
on t1.ID = t2.ID 
inner join tableItem t3 
on t1.ID = t3.ID 
+0

DISTINCT를 사용하여 데이터베이스 디자인의 문제점을 가려주는 것은 좋지 않습니다. –

+0

이것은 MS Access에서 실행되지 않습니다. – Fionnuala

관련 문제