Mysql 데이터베이스 쿼리 질문

djkneg883   
   조회 1673   추천 0    

아래와 같이 테이블이 2개 있을 때 사과, 맥주품목의 영수증번호를 뽑고 싶습니다.

SELECT 영수증번호 FROM 테이블 A ta INNER JOIN 테이블 B tb on ta.영수증번호 = tb.영수증번호 WHERE b.품목 = '사과' or b.품목 = '맥주';

위 처럼 쿼리를 날리면 결과가

쿼리결과: a, a , c , c, d

이렇게 나오는데 distinct 를 쓰지 않고 결과를 a,c,d만 뽑을 수 있도록하는 속도를 빠르게 할 수 있는 쿼리가 어떻게 될까요? 

원하는 결과: a, c, d

지금 단순하게 테이블을 작성해놨는데 칼럼이 여러개이고 데이터가 테이블A에 50만개정도 테이블 B에 150~500만개정도 쌓였을 때 distcint를 하고 order 를 쓰면 속도가 느릴것 같아서 여쭤봅니다.


테이블 A

영수증번호금액
a500
b1000
c2200
d3000


테이블 B

영수증번호품목
a사과
a맥주
b수박
c사과
c맥주
c포도
d사과
d키위
짧은글 일수록 신중하게.
Zer0 2023-03
group by
     
Zer0 2023-03
근데 속도차이나 성능은 별 차이없을듯 하네요 distinct랑.
windfantasia 2023-03
group by 1표 추가.
DAP박인호 2023-03
다른 조건이 없다면
SELECT DISTINCT 영수증번호 FROM 테이블B WHERE 품목 IN ('사과','맥주')

조회 조건, INDEX 에 따라 쿼리는 달라지기 때문에
이렇게 문의하시면 원하시는 답은 받기 힘드실 듯
머하지 2023-03
EXISTS ?
DAP박인호 2023-03
부모 테이블 조회에
자식 테이블 체크 조건을 추가할 경우
exists 를 사용 하면 좋은 성능을 내는 경우가 많습니다.
(앞에서 이야기 드렸듯이 조회 조건, INDEX에 따라 달라짐)

SELECT 영수증번호
FROM 테이블A a
WHERE EXISTS (
SELECT 1
FROM 테이블B b
WHERE b.영수증번호 = a.영수증번호
AND b.품목 IN ('사과','맥주')
LIMIT 1
)
     
djkneg883 2023-03
네 항상 좋은 답변주셔서 감사합니다. 한번 시도해보겠습니다!!
     
앙드레준 2023-03
좋은 답변을 달아주시는군요.^^
덕분에 QnA가 풍성해지고 있습니다.


QnA
제목Page 374/5728
2014-05   5255834   정은준1
2015-12   1780755   백메가
2017-11   4729   전산직딩
2012-09   9617   병맛폰
2020-04   2891   폴리76
2012-09   21581   민사장
2020-04   5320   오버액션토끼
2009-07   8728   김진우
2015-11   5412   성민박
2017-11   4755   김민철GC
2023-03   1328   시공의폭풍
2020-04   3735   강한구
02-10   802   민욱님
2012-10   15172   싱어송라이터
2015-11   3974   Noadd
2017-11   3977   나라사랑
2015-11   4405   권용1
2021-09   2330   삐돌이슬픔이
2015-11   4550   준바이
2020-04   3592   전진
2009-09   5965   조재성
2015-11   3155   전설속의미…