2011-02-17 2 views
1

실행하려는 일부 SQL에 혼란 스럽습니다. 여기 그래서 SQL은 ms access 2007 SQL "not like"가 빈 셀을 무시합니다.

SELECT username, ID, Text1 
    FROM user_info 
WHERE username NOT LIKE 'red*' 
     AND text1 NOT LIKE 'sd*'; 

그래서 내가

Username ID  Text1 
green 5542911   
bluee 5333121  ffds 

의 결과 세트를 볼 것으로 예상 할 것 샘플 데이터 세트

Username ID  Text1 
red55 1235342  fdfdf 
black 5542121  sdsd 
red32 5542145  sffrds 
green 5542911   
bluee 5333121  ffds 

입니다 그러나 그것은 작동하지 않습니다. 빈 값을 무시하는 것 같습니다. 나는 오직 하나의 기록만을 보았을 것이다. 나는 "sd"로 시작하지 않는 레코드와 "red"를 시작하지 않는 레코드를 보여주기 위해 SQL을 필요로한다. 그러나 그것들은 모두 공백을 없애거나 OR 문을 사용하면 아무 것도 없애 버립니다.

아이디어가 있으십니까? 나는 여기에 붙어있다!

답변

5

null을 명시 적으로 처리해야합니다. 하나의 옵션은 다음과 같습니다.

SELECT username, ID, Text1 
FROM user_info 
WHERE (username Is Null OR username NOT LIKE 'red*') 
    AND (text1 Is Null OR text1 NOT LIKE 'sd*') 
+0

완벽한 - 감사합니다. –

+1

또 다른 옵션은 Nullable 컬럼을 '디자인 아웃'하는 것입니다. – onedaywhen

+0

@onedaywhen : 나는 그 제안을 좋아하지만 그것을하기위한 몇 가지 방법이있다. 그것에 관한 모든 의견 또는 토론에 대한 포인터가 다른 곳에 있습니다. 옵션에 대한 내 생각은 다음과 같습니다. 1. 데이터 유형 변경, 2. 기본값 정의 또는 3. 다른 테이블의 행으로 컬럼 변환. 흥미로운 주제는 저를위한 스키마 디자인과 관련이 있습니다. –

관련 문제