我读到null无法与null比较,结果始终为false。
在下面的链接中,我可以比较2个空值并返回行。
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
那么关于空值比较的正确陈述是什么?
答案 0 :(得分:3)
您插入的值是字符串。 'NULL'
是一个字符串,是一个确定的值。要插入NULL
,您不应使用引号,例如:
INSERT INTO table (field1, field2) VALUES ('foo', NULL)
你无法与NULL
进行比较,了解它的含义就像未定义的那样。虽然,您可以测试值是否为NULL
。
答案 1 :(得分:3)
您正在使用' NULL' (一个字符串)not NULL ..所以你要比较两个(相同的)字符串
在mysql中有一个null安全操作符,将两个空值
比较为true <=>
NULL-safe相等。此运算符执行与=运算符相等的比较,但如果两个操作数均为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
因此,对于正确的空安全连接,您应该使用
select * from user as u
join banstatus as b on u.banstatus<=>b.id
答案 2 :(得分:1)
在你的答案中,你将NULL比作varchar,而不是普通的NULL。