2017-12-04 18 views
0

가입 왼쪽 :중복 된 기록은 내가이 SQL 쿼리를 사용하는 경우, 중복 <strong>이</strong> shops.id 없습니다 있습니다

SELECT * 
FROM shops 
LEFT JOIN expiration 
     ON shops.id = expiration.shopid 
ORDER BY shops.id 

을하지만 (여기서 문)이 하나를 사용할 때 많은 중복 상점이있다 .ID는 :

SELECT * 
FROM shops 
LEFT JOIN expiration 
     ON shops.id = expiration.shopid 
WHERE shops.ref = 9 
ORDER BY shops.id 

은 반환 중복 행을 가입 왼쪽 어떻게 원인을 추가하는 이유 이?

+5

몇 가지 샘플 테이블 데이터를 추가하고 두 가지 다른 결과를 보여줍니다. (서식이 지정된 텍스트는 이미지가 아니라 제발입니다.) – jarlh

+5

나는 첫 번째 쿼리에서 반환 된 중복을 보지 못했을 것으로 추측하고 있습니다. 첫 번째 쿼리에서 –

+2

을 주문한 경우 stores.ref에 주문하십시오. 이제 중복 기록도 볼 수 있습니다. 방금 살펴 봤는데, 거기에 있었다 – GuidoG

답변

0

모든 사람이 이미 첫 번째 검색어에 중복되었지만 방금에 놓친 것처럼 보입니다. 당신은 고유

SELECT DISTINCT * 
FROM shops 
LEFT JOIN expiration 
     ON shops.id = expiration.shopid 
WHERE shops.ref = 9 
ORDER BY shops.id 

데이터없이 어려운 선택하려고 할 수

SELECT 'shops', shops.id, COUNT(*) 
FROM shops 
GROUP BY shops.id 
HAVING COUNT(*) > 1 

UNION ALL  

SELECT 'expiration ', expiration.shopid , COUNT(*) 
FROM expiration 
GROUP BY expiration.shopid 
HAVING COUNT(*) > 1 
+0

고맙습니다. 왼쪽 조인 이외의 고유 한 행을 어떻게 가져야합니까? –

+1

'GROUP BY' 또는'DISTINCT'하지만 요구 사항에 따라 다릅니다. 샘플 데이터와 예상 결과를 게시하십시오. –

0

을 테스트하기 쉽습니다. 그러나 그것은 도움이 될 수 있습니다.

SELECT DISTINCT * 
    FROM shops 
    LEFT OUTER JOIN expiration 
      ON shops.id = expiration.shopid 
    WHERE shops.ref = 9 
    ORDER BY shops.id 

는 희망이 도움이 :

또 다른 옵션은 물론 가입 왼쪽 외부를 포함 할 수 있습니다.