【发布时间】:2023-01-02 00:21:57
【问题描述】:
CREATE TABLE poll
(
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
answer CHAR(1)
);
INSERT INTO poll (id, name, answer) VALUES (1, 'Neil', NULL);
INSERT INTO poll (id, name, answer) VALUES (2, 'Nina', 'Y');
INSERT INTO poll (id, name, answer) VALUES (3, 'Walt', 'N');
-- Expected output:
-- Neil
编写一个查询,选择每个以字母“N”开头但没有“Y”作为答案的姓名。
select name
from
(select *
from poll
where name like 'N%') x
where
x.answer not like '%Y%'
select name
from
(select name
from poll
where answer not like '%Y%') x
where
x.name like 'N%'
【问题讨论】:
-
answer is NULL不返回的问题吗?如果是这样,根本原因是如果你比较任何事物使用除IS NULL(或IS NOT NULL)以外的任何运算符更改为NULL,它将无法通过测试。即使是where NULL = NULL也无法通过测试。 -
因此,即使 NULL 与
'%Y%'不同,x.answer NOT LIKE '%Y%'也不会返回x.answer为空的记录。 -
NULL是所有特殊情况中的特殊情况:返回 True 的唯一比较将是IS NULL或NOT IS NULL(或IS NOT NULL:两种语法都允许。)
标签: sql