2014-01-30 2 views
0

SQL 쿼리에서 문제가 발생했습니다.SQL 쿼리 최대 값과 최소값

다음 테이블이있는 테이블 table_name이 있습니다 : id, zip, size. 이 표에는 3 개의 항목이 있으며 '우편 번호'입력란은 2001, 2005, 2009이고 '크기'값은 3 개의 입력 항목 모두에 대해 5입니다. 그리고 나는 나의 수색 당 분야의 최대와 최소 가치를 원한다.

내가 2001 년에서 2009 년 사이에 어떤 값을 검색하면 쿼리는 쿼리 당 완벽한 결과를 얻습니다.

예 : 다음 필드 값 2003을 검색하는 경우는 최소값 2001 최대 값 2005

그러나 때 2009보다 작 2001 이상의 값을 검색 한 후 비어 결과를 제공 모두를 제공합니다.

아무도 내 쿼리에서 어떤 실수를했는지 알려주실 수 있습니까?

SELECT * FROM `table_name` 
WHERE `size` LIKE ('%5%') 
    AND (`zip` in (SELECT max(`zip`) 
       FROM `table_name` 
       WHERE `zip` < '2010' 
       order by `zip` desc) 
    OR `zip` in (SELECT min(`zip`) 
       FROM `table_name` 
       WHERE `zip` > '2010' 
       order by `zip` asc) 
    ) 
+1

'zip'필드는 숫자 또는 char 필드입니까? 또한 '크기'필드는 어떤 데이터 유형입니까? – krowe

+0

당신은'MySQL','SQL-Server','SQL-Server-2008' 태그를 붙였습니다. 그러나 이것은'MySQL' 문법과 같이 의심 스럽습니다. 어떤 DBMS를 실제로 사용하고 있습니까? – GarethD

+1

2010을 검색 할 때 2009 년을 반환해야합니다. 그렇지 않으면 데이터 유형이 잘못되었을 수 있습니다. Btw, 당신은 스칼라 서브 쿼리에서 ORDER BY가 필요하지 않습니다. – dnoeth

답변

0

의견을 보내 주셔서 감사합니다.

마지막으로 내 쿼리의 실수를 찾습니다. 내 검색어에 LIKE ('%5%')을 사용했습니다.이 브라켓은 ()으로 인해 문제가 발생했습니다. 그래서 나는 단지 괄호 양식을 제거합니다 LIKE 또한 LIKE '%5%' 조건을 내부 쿼리에 추가했습니다.

SELECT * FROM `table_name` WHERE `size` LIKE '%5%' AND (`zip` in (SELECT max(`zip`) FROM `table_name` WHERE `zip` < '2010' AND `size` LIKE '%5%' order by `zip` desc) OR `zip` in (SELECT min(`zip`) FROM `table_name` WHERE `zip` > '2010' AND `size` LIKE '%5%' order by `zip` asc)) 
1

데이터 유형과 관련이있을 수 있습니다. >와 < 문자열 값에 대한 기준. 먼저 정수 값으로 변환하는 것이 좋습니다

관련 문제