【问题标题】:Write a query that selects each name starting with the letter 'N' that DOES NOT HAVE 'Y' as an answer编写一个查询,选择每个以字母 \'N\' 开头但没有 \'Y\' 作为答案的名称
【发布时间】: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 NULLNOT IS NULL(或 IS NOT NULL:两种语法都允许。)

标签: sql


【解决方案1】:

不知道为什么你的不工作......不知道子查询的重点是什么,其他避免在你的 where 条件中使用 and 语句:

SELECT name
FROM poll
WHERE name LIKE 'N%'
AND answer <> 'Y'

【讨论】:

  • 您可能还想将 answer &lt;&gt; 'Y' 更改为 (answer &lt;&gt; 'Y' or answer IS NULL),以确保返回带有 NULL 的记录。
猜你喜欢
  • 2021-07-18
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多