2017-12-23 18 views
-4

나는 university name, stream, 입시 시험 및 컷오프가 들어있는 country라는 이름의 데이터베이스에 테이블을 가지고 있습니다. 내가 드롭 다운에 GMAT 또는 MS를 선택하면 스트림 MS가 어디에 내가 테이블에서 university_name을 원하는 은 내가 tabel에서 대학을 선택하려는 그 동안 나는나는 단일 행 - 테이블의 열을 여러 쿼리를 사용하는 방법을 사용하여 가져올 수 있습니까?

SELECT university_name FROM country WHERE stream = ms AND entrance_exam = GMAT OR MS; 

으로 쿼리를 사용하고 있습니다. 내 문제를 해결하고 어떻게해야하는지 알려주십시오. enter image description here

+2

이 넣어 나쁜 디자인이다 데이터베이스 열에 쉼표로 구분 된 목록. 데이터를 표준화해야합니다. – Barmar

+0

왜 당신은 자신의 테이블에 별도의 스트림을하지 말아요 – JoshKisb

답변

1

= 테스트 직후에 OR을 입력 할 수 없습니다. 여러 값에 대해 단일 열을 테스트하려면 테스트를 반복해야합니다. SQL에서

stream = 'ms' OR stream = 'mba' 

이에 대한 바로 가기가 : 당신은 쉼표로 구분 된 목록을 가지고 있기 때문에

stream IN ('ms', 'mba') 

그러나, 이것은 디자인에 작동하지 않습니다. 회원 자격을 테스트하려면 FIND_IN_SET()을 사용해야하며 여러 번의 테스트를위한 지름길은 없습니다.

SELECT university_name 
FROM country 
WHERE (FIND_IN_SET('ms', stream) OR FIND_IN_SET('mba', stream)) 
AND (FIND_IN_SET('GMAT', entrance_exam) OR FIND_IN_SET('MS', entrance_exam)) 

Query with multiple values in a column

그들이 AND와 혼합 할 때 당신이 각 OR 표현의 주위에 괄호를 넣어 확인을 참조하십시오. SQL statement is ignoring where parameter

쉼표로 구분 된 목록 대신 데이터를 정규화하면 훨씬 더 좋습니다.

university_name  stream 
pune university  ms 
pune university  mba 
Acadia University ms 
Acadia University mba 

과 같은 행이 university_entrance 테이블 :

university_name  exam 
pune university  GMAT 
pune university  MS 
Acadia University GMAT 
Acadia University MS 

그런 다음 당신은 테이블을 조인 것을 : 당신은 같은 행으로 university_stream 테이블이 있어야합니다

SELECT DISTINCT a.university_name 
FROM university_stream AS a 
JOIN university_entrance AS b ON a.university_name = b.university_name 
WHERE a.stream IN ('ms', 'mba') 
AND b.exam IN ('GMAT', 'MS') 
+0

당신 덕분에 선생님이 작동합니다 .... –