2014-07-07 2 views
0

나는 클라이언트와 멤버 모두 다른 진행 상황을 저장하는 progress라는 테이블을 가지고 있습니다.MySQL 쿼리를 향상시켜 레코드를 가져옵니다.

enter image description here

는 둘 다 클라이언트에서 클라이언트에 회원 및 회원에 진행 데이터를 얻을 수 있다고 가정하는 MYSQL 쿼리를 가지고있다. 현재 다음과 같은 방식으로 쿼리를 사용하고 있습니다.

SELECT * 
FROM progress 
WHERE (client = 'XXXX' AND member = 'YYYY') 
    OR (client = 'YYYY' AND member = 'XXXX') 

내가 원하는 결과를 얻지 만 어떻게 필자가 작성한 방식으로이 쿼리를 향상시킬 수 있습니까?

도와주세요. 도움을 주시면 감사하겠습니다.

는 사전에 조합을 사용하여

+4

나에게 잘 보이는 :

편집 내가했던 바이올린을 추가 잊으. 훨씬 간단해질 수는 없습니다. – Barmar

+0

나는 그가 실제로 두 가지 역할을 바꿀 의도가 있다고 생각하고 잘못 복사했다. – Barmar

+0

'XXXX'가 숫자 인 경우 'XXXX'를 사용하지 마십시오. – hjpotter92

답변

2

Barmar는 의견 It can't get much simpler했다하지만 당신은이 쿼리 쓰기의 질문에 따라 몇 가지 옵션을 가지고 : 당신은 당신이 IN

을 사용할 수 있습니다

select * from progress where (client = 'xxxx' and member = 'yyyy') 
union all 
select * from progress where (client = 'yyyy' and member = 'xxxx') 

노동 조합을 사용할 수 있습니다

select * from progress 
where (client) in ('XXXX','YYYY') 
    and (member) in ('YYYY','XXXX'); 

그리고 나만의 해결책을 사용할 수 있습니다. http://sqlfiddle.com/#!2/74e6ec/7

0

시도를 주셔서 감사합니다.

SELECT * FROM progress WHERE (client = 'XXXX' AND member = 'YYYY') 
UNION ALL 
SELECT * FROM progress WHERE (client = 'YYYY' AND member = 'XXXX') 
+0

왜? 정당화하십시오. – hjpotter92

+0

http://www.techfounder.net/2008/10/15/optimizing-or-union-operations-in-mysql/ – go0n

+0

UNION ALL은 중복이 의심되므로 올바른 선택입니다. – go0n

관련 문제