2011-04-20 3 views
0

저는 mySql을 처음 사용하고 있으며 몇 가지 다른 테이블의 데이터를 사용하여 한 열에서 필터링 쿼리를 수행하려고합니다. 예를 들어, 이름표, 스포츠 등급 표 및 운동 표를 가져올 수 있습니다.mysql WHERE XXX = ZZZ 및 XXX = YYY

나는

WHERE beta.sport = 'basketball'; 농구에 대한 베타 아이디의 모든 효과적으로 농구를 모든 아이들을 끌어 사용하여이 데이터베이스를 조회 할 수 있습니다. 이제 저는 농구를하고 Lacrosee를하는 모든 아이들을 찾고 싶습니다.

WHERE beta.sport = 'basketball' AND beta.sport = 'lacrosse'; 

문제는 쿼리가 제대로 실행되지만 결과는 0입니다. 나는 수동으로 내 데이터를보고, 농구와 라크로스를하는 아이들이 있다는 것을 압니다. 농구와 라크로스 게임을하는 아이들을 어떻게 필터링합니까? OR은 라크로스 나 농구를하는 아이들을 돌려줍니다. 나는 단지 둘 다 플레이하는 아이들을 돌려주고 싶다. 스포츠 목록에있는 유일한 액세스 권한은이 하나의 테이블 베타에서 나온다.

표 베타

beta_id - sport || 
1 - basketball || 
2 - lacrosse || 
3 - football || 
4 - basketball || 
+0

조회에 '농구 말한다 WHERE 사용 또는

로 괄호 안에 당신의 상태를 포장에 익숙해 '와 beta.sport ='lacrosse '하지만 다음 문장에서는 "농구와 축구"라고 말합니다. 두 번째 스포츠는 무엇입니까? – rajah9

+0

그 검색어에 라크로스가 있으시면 축구 란 뜻인가요? 기본적으로 AND 또는 OR을 사용하여 선택할 수 있습니다. IN을 볼 수도 있습니다. – ColWhi

+0

Quassnoi를 제외한 모든 사람들이 그 점을 놓쳤습니다. ccdpowell은 간단한 'AND'를 쓸 때 잘못 추측했지만 'OR'은 원하지 않습니다. 물론 Quassnoi의 솔루션은 링크 테이블이 존재하고 적절한 정보를 보유하고 있다고 가정하지만 올바른 접근 방식을 제공하는 것은 지금까지 유일합니다. – anothershrubery

답변

4
SELECT * 
FROM names n 
WHERE (
     SELECT COUNT(*) 
     FROM beta b 
     WHERE b.sport IN ('basketball', 'lacrosse') 
       AND b.name = n.id 
     ) = 2 
+0

Thank you! IN 절은 내가 찾고있는 절이었고 찾을 방법을 모른다. – ccdpowell

+0

@ccdpowell :'IN' 절은 'sport ='basketball 'OR sport ='lacrosse '에 대한 편리한 별칭입니다. 실제로 찾고있는 하위 쿼리에서'COUNT (*) = 2'입니다. – Quassnoi

0

"WHERE beta.sport = '농구'AND beta.sport = '라크로스';" bet.sport = 'basketball'OR beta.sport = 'lacrosse'; 베타. 포트가 모두 농구 라크로스가되도록 요구할 때부터 행을 반환 할 수 없습니다. 당신은 모두의 부속 선택을 시도 할 수 있습니다

... 대신

select * from sportsTable 
where itemID in 
(select itemID from sportsTable WHERE beta.sport = 'basketball') 
and itemID in 
(select itemID from sportsTable WHERE beta.sport = 'lacrosse') 

+0

이것이 문제라는 것을 알고 있습니다 ... 내가 사용하거나 농구를하고 라크로스를하지 않는 아이들도 포함됩니다. 나는 농구와 라크로스 모두를하는 아이들의 결과만을 원합니다. – ccdpowell

+0

위의 업데이트 된 코드를 참조하십시오 ... –

0
WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE' 

주 드 OR, AND.

내가 농구를 모든 어린이와 라크로스를 재생할 모든 아이들이 원하는 :

1

당신 수단과 OR

으로 변경할 필요가 AND하지 않습니다.

나는 그것이 모두 라크로스와 농구를하는 모든 아이들을 원한다는 것을 의미합니다.

(beta.sport = '농구'OR beta.sport = '라크로스')가

관련 문제