2013-08-13 1 views
0

이 질문은 혼란 스러울 지 모르지만 간략하게 설명하겠습니다.MS-ACCESS 다른 쿼리와 일치하는 필드가있는 모든 레코드를 선택하는 쿼리를 만드는 방법은 무엇입니까?

저는 query1을 호출하고, 모든 제품에 대해 훨씬 더 큰 테이블을 호출합니다.

Item_Code Description Order_Qty Option 
1000   Prod1   5   Blue 
1005   Prod5   3   Brown 
1602   Prod6   1   Red 
5620   Prod8   6   Yellow 
9865   Prod2   1   Brown 
1624   Prod3   3   Brown 
9876   Prod12   4   Blue 

지금 내 테이블에, 나는 같은 형식을 가진 제품의 훨씬 더 큰 목록을 가지고 : 여기에 쿼리 1입니다. 파란색, 갈색, 빨간색 및 노란색의 ALL을 포함하는 새로운 쿼리를 만들고 싶습니다. 그것은 작동하지만 항상 중복이 있습니다.

나는 내 시도를 게시하는 방법을 모르지만 내가 시도한 것을 설명 할 것입니다. 나는 새로운 쿼리를 만들고 테이블과 query1을 포함시켰다. 나는 둘 사이의 관계를 만들어 "옵션"이 같은 행만 포함시켰다. 그러나 어떤 이유로 인해 결과 쿼리가 반복으로 나타납니다. 예 :

Item_Code Description Order_Qty Option 
1000   Prod1   5   Blue 
1009 <-- Prod2   6   Blue  
1009 <-- Prod2   6   Blue  
1010 <-- Prod9   7   Blue  
1010 <-- Prod9   7   Blue  
1011 <-- Prod11   9   Blue  
1011 <-- Prod11   9   Blue  
9876 <-- Prod12   4   Blue  
9876 <-- Prod12   4   Blue 
1005 <-- Prod5   3   Brown 
1005 <-- Prod5   3   Brown 
9865 <-- Prod2   1   Brown 
9865 <-- Prod2   1   Brown 
1624 <-- Prod3   3   Brown 
1624 <-- Prod3   3   Brown 
9877   Prod99   7   Brown 
1111 <-- Prod67   8   Brown 
1111 <-- Prod67   8   Brown  
1602   Prod6   1   Red 
1752   Prod56   2   Red 
5620   Prod8   6   Yellow 

그리고 최악의 부분은 항상 반복되는 것은 아닙니다. 어쩌면 내가 잘못 접근하고있는 것일 수 있습니다.

나는 이것이 tldr의 경우일지도 모른다. 그러나 누군가가 그 일을 훌륭하게 도울 수 있다면.

감사합니다.

+0

이것은 'MySql'과 관련이 있습니까? – Brad

답변

2

GROUP BY 절 또는 DISTINCT 키워드를 쿼리에 추가해야하는 것처럼 들립니다.

SELECT DISTINCT Item_Code, Description, Order_Qty, Option 

(또는 같은 일을 Access에서 어떤 옵션을 클릭합니다.)

그것은 쿼리는 사용자가 제공 한 정보를 제공 행을 "중복"반환 이유를 진단하는 것은 불가능하다.

all_products의 행이 query1에서 두 개 이상의 행이 일치하는 경우는 query1에서 일치하는 각 행에 대해 all_products에서 행의 사본을 얻을 수 있도록 쿼리는 "복제"행을 반환합니다.


query1에서 Option이라는 고유 목록이있는 경우 성능이 향상 될 수 있습니다. (나는 MS Access를 "하지"않는다. "mysql"이라는 태그가 붙어 있기 때문에 질문을 제기했다 .Jet 데이터베이스 엔진은 훌륭하지만 모든 것이 있지만 다중 사용자 환경에서는 제대로 작동하지 않는다.) SQL 서버, 오라클, MySQL, DB2, 테라 데이타 등 당신은 아마에만 열을 선택하고 있기 때문에 귀하의 질의가 중복을 반환

SELECT p.Item_Code 
    , p.Description 
    , p.Order_Qty 
    , p.Option 
    FROM mytable p 
    JOIN (SELECT q1.Option 
      FROM query1 q1 
      GROUP BY q1.Option 
     ) q 
    ON q.Option = p.Option 
+0

와우. DISTINCT 사용이 작동합니다. 그것은 일종의 부정 행위입니다. 루비 스 큐브를 그리는 것과 같습니다. 그러나 무엇이든지 작동합니다. ;) TY –

+0

(Rubix 큐브를 그림에 대해 모르겠다.처음 두 레벨이 끝나면 마지막 레벨을 따로 따로 집어 넣었습니다.) DISTINCT 키워드는 기본적으로 중복 된 행을 찾고 그 중 하나만 제외하고 모두 제거합니다. 그것이 바로 그 때문입니다. – spencer7593

2

하나 개의 테이블을 형성하지만 조인 데카르트의 제품이 증식에게 결과를 생성 충분하므로 특정되지 않습니다 : 우리는이 같은 쿼리 뭔가를 쓰는 것입니다. 나는. 단 하나의 참여가 option = option이면 모든 blue이 (가) blue에 참여할 것임을 의미합니다. 조인에서 ON 절에 더 많은 제한이 필요할 수 있습니다.

distinct을 사용하면 올바른 답처럼 보일 수 있지만 문제는 그냥 마스킹하는 것입니다.

관련 문제