programing

좋아요와 좋아요가 반대 결과를 반환하지 않음

bestprogram 2023. 8. 10. 19:01

좋아요와 좋아요가 반대 결과를 반환하지 않음

저는 200개의 레코드가 있는 테이블을 가지고 있는데, 그 중 10개의 레코드에 'TAX'라는 단어가 포함된 텍스트가 있습니다.

실행 중인 경우

Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'

그러면 저는 그 10개의 기록으로 결과를 정확하게 알 수 있습니다.

하지만 제가 그 기록들을 제외하려고 할 때는

Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'

190개 대신 100개의 레코드만 반환합니다.

이것이 올바른 결과를 반환합니까?

Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'

믿어요NULL여기서 문제가 되는 것은 값입니다. 열에 값이 포함되어 있으면NULL NOT LIKE '%TAX%'돌아올 것입니다UNKNOWN/NULL따라서 선택되지 않습니다.

가치를 다루는 것에 대해 읽으시거나 여기서 읽어보시기를 권합니다.

@ughai가 제안한 것처럼 성능에 문제가 있는 경우 다음을 사용할 수도 있습니다.

  Select * from tbl1 
  WHERE [TextCol] NOT LIKE '%TAX%'
     OR [TextCol] IS NULL

SQL 비교 연산자는 다음과 같은 세 가지 가능한 값을 산출합니다.참, 거짓 및 알 수 없음.한 피연산자 또는 두 피연산자가 모두NULL결과는 Unknown입니다.일부 값(사람의 나이)을 상수(18)와 비교하는 다음 예를 생각해 보십시오.

21   >= 18 -- True
15   >= 18 -- False
NULL >= 18 -- Unknown

보다시피 데이터베이스는 다음 항목을 결정할 수 있습니다.NULL18보다 큽니다.

데이터베이스는 다음 위치의 행만 반환합니다.WHERE절은 True로 평가됩니다.식 반전(예:WHERE age >= 18로 변경된.WHERE age < 18)는 알 수 없는 결과에 영향을 주지 않습니다.

를 사용하여 일치시킬 수 있습니다.NULL가치.다음 쿼리는 열이 패턴과 일치하지 않거나 열이 NULL인 행을 선택합니다.

WHERE [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

다음과 같은 기능ISNULL그리고.COALESCE변환에 사용할 수 있습니다.NULL어느 정도 가치가 있는

  1. Select * from tbl1 
    WHERE ([TextCol] NOT LIKE '%TAX%') AND ([TextCol] NOT LIKE '%TAX%')
    
  2. select * from tbl1
    where [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL
    

저도 같은 문제를 가지고 있었습니다.INnull이 있는 단순 int 열의 연산자입니다.생각했던 것처럼 서로 반대되는 부분이 없다는 것을 알게 되었습니다. (행 수를 보면 알 수 있었습니다.)

select * from Dest where id in(select id from Source)
select * from Dest where id NOT in(select id from Source)

서로를 뒤집기 위해 나는 그것들을 다음과 같이 다시 써야 했습니다.

select * from Dest where isnull(id,-2)  in(select isnull(id,-1) from Source) 
select * from Dest where isnull(id,-2) NOT in(select isnull(id,-1) from Source) 

언급URL : https://stackoverflow.com/questions/40376260/not-like-and-like-not-returning-opposite-result