programing

MySQL: OR 없이 colIN(null, "")이 가능한 테이블에서 *를 선택합니다.

newstyles 2023. 10. 31. 20:35

MySQL: OR 없이 colIN(null, "")이 가능한 테이블에서 *를 선택합니다.

또는 를 사용하지 않고 MySQL의 빈 문자열 및 NULL 값에 대한 선택을 수행할 수 있습니까?

다음 내용:

   select * from table where col IN (null, "");

작동하지 않거나 null을 무시합니다(또는 'null' 문자열과 일치할 가능성이 있습니다)

SELECT  *
FROM    mytable
WHERE   COALESCE(col, '') = ''

그러나 주의할 점은 다음과 같습니다.OR만약 열이 색인화된다면 쿼리는 훨씬 더 효율적이 될 것입니다.

SELECT  *
FROM    mytable
WHERE   col = '' OR col IS NULL

이것은 사용할 것입니다.ref_or_null인덱스에 액세스 경로가 있습니다.

값 목록과 함께 선택해야 하는 경우NULLs, null가 아닌 모든 값을 목록에 넣고 단일 값을 추가하면 됩니다.OR IS NULL조건:

SELECT  *
FROM    mytable
WHERE   col IN ('val1', 'val2', 'val3') OR col IS NULL

이것은 에 대한 인덱스를 사용할 것입니다.col뿐만 아니라.

다른 사람이 이 솔루션을 찾고 있는 경우, 저도 마찬가지입니다. 두 개 이상의 열로 검색하는 경우 괄호 안의 where/또는 statement를 그룹화해야 합니다.

이렇게 하면 다음과 같은 결과가 반환되지 않습니다.

SELECT * 
FROM table 
WHERE col1 IN ('val1', 'val2') OR col1 IS NULL AND col2 IN ('val3', 'val4')

"OR col1 IS NULL"은 "AND col2 IN" 문을 완전히 덮어씁니다.

col1에 대한 모든 조건을 괄호 안에 넣으면 다음과 같이 작동합니다.

SELECT * 
FROM table 
WHERE (col1 IN ('val1', 'val2') OR col1 IS NULL) AND col2 IN ('val3', 'val4') 

(적어도 제 경험에서는) 일반적으로 WHERE 문장을 괄호 안에 넣지 않기 때문에 이 작업을 시도하는 데 시간이 걸렸습니다.

그것은 나에게 아주 좋은 일입니다.

SELECT *
FROM table
WHERE IFNULL(col1, '-') IN('val1', 'val2', '-') AND col2 IN ('val3', 'val4')

언급URL : https://stackoverflow.com/questions/2147824/mysql-select-from-table-where-col-in-null-possible-without-or