2017-10-12 9 views
1

null을 null과 비교할 수 없으며 결과는 항상 거짓임을 읽습니다.참여 중에 null 비교

아래 링크에서 2 개의 null을 비교할 수 있으며 행이 반환됩니다.

CREATE TABLE user (id varchar(50), banstatus varchar(100)); 
INSERT INTO user (id, banstatus) VALUES ('1', '1'); 
INSERT INTO user values ('2', 'NULL'); 

CREATE TABLE banstatus (id varchar(50), texti varchar(100)); 
INSERT INTO banstatus VALUES('1', 'Banned'); 
Insert into banstatus values ('NULL' , 'NULL'); 

select * from user as u 
join banstatus as b on u.banstatus=b.id 

http://sqlfiddle.com/#!9/33f25/1/0

그래서 널 (null)의 비교에 대한 올바른 문장은 무엇인가?

+1

'NULL'문자열을 사용한다! 9/0f1cce/1/0이 바이올린은 2 번째 레코드가 이제 NULL 문자열이 아니더라도 '1'레코드가 반환되었음을 보여줍니다. 그래서 "null의 비교에 대한 올바른 진술은 무엇입니까?" 당신이 읽은 것. – xQbert

+1

다음 사례를 고려하십시오. http://sqlfiddle.com/#!9/0f1cce/7/1'banstatus가 null 인 경우 'Null'이 isNull로 끝나는 경우 case banstatus = null 인 경우 'NULL = NULL' elsest NullCantCompare, banstatus <> null then 'NULL 인 경우'NULL <=> Null 'else 'NOT NULL <=> NULL'end as NULLSafeCompare' – xQbert

+0

사용자의 ID 값이 왜 VARCHAR (50)입니까? 그것은 틀린 것처럼 보인다. 일반적으로 'INT AUTO_INCREMENT PRIMARY KEY NOT NULL' 타입을 사용하여이 숫자들을 순차적으로 생성합니다. – tadman

답변

3

삽입 한 값은 문자열입니다. 'NULL'은 문자열이며 명확한 값입니다.

INSERT INTO table (field1, field2) VALUES ('foo', NULL) 

DEMO

을 그리고 당신은 그것이 정의되지 않은 같은 뭔가 의미를 이해하기 위해, NULL와 비교할 수 없습니다 : 삽입하려면 NULL 당신은 예를 들어, 따옴표를 사용하지 않아야합니다. 그러나 값이 NULL인지 여부는 테스트 할 수 있습니다.

1

당신의 대답에서 NULL을 varchar로, 보통 NULL이 아닌 것으로 비교하십시오.

3

당신은 'NULL'(문자열) NULL이 아닌 .. 그래서 당신이 비교되는 두 (같은) 문자열을 사용하는 MySQL의에서

는 사실 null 값

<=> 
모두 비교 널 안전 opearator있다

NULL로 안전합니다. 이 연산자는 = 연산자와 같은 평등 비교를 수행하지만 두 피연산자가 모두 NULL이면 1을 반환하고 하나의 피연산자가 NULL이면 NULL이 아닌 0을 반환합니다.

https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to

때문에 안전 조인 올바른 널 위해 당신이 (당신이 가지고있는) NULL http://sqlfiddle.com/#과 동일하지 않습니다

select * from user as u 
join banstatus as b on u.banstatus<=>b.id 
+0

그는 그 (것)들을 일치하고 싶지 않고, 그가 일치하고 있는지 궁금해하고 있습니다. – Barmar

+0

나는이 바보 같은 질문에 대한 downvotes받을 그렇지 않으면이 질문을 삭제합니다. 나는 'null'이 문자열이라는 것을 알지 못했다. – Zephyr

+0

대답은 당신의 케이스에 대한 설명과 실제 null 값에 대한 해결책으로 업데이트되었습니다 ... 그리고 나는 downvote ..을 보지 못합니다. 당신의 질문은 정확하고 (그리고 매우 드물지 않은) 질문처럼 보입니다. – scaisEdge