我已经尝试了 leetcode 584 数据库查询挑战这里是挑战question
论坛上一个人的答案告诉我答案应该是:
SELECT name FROM customer WHERE COALESCE(referee_id,0) <> 2;
我知道COALESCE FUNCTION
是关于。但是,我不知道为什么将 0 放在括号中作为参数和代码中的逻辑"COALESCE(referee_id,0)<>2"
我希望有人能帮助我解释WHERE
子句的逻辑。非常感谢你,我很感激。
如果referee_id
为NULL
,则referee_id <> 2
也为NULL
,因此不成立。referee_id
为NULL
且0 <> 2
为 true 时,coalesce(referee_id, 0) <> 2
与0 <> 2
相同。
根据练习,应该包括referee_id
为NULL
的客户。这就是使用coalesce(referee_id, 0) <> 2
的原因。
然而,我宁愿写
...
WHERE referee_id <> 2
OR referee_id
...
因为如果要更改查询以检查0
以外的referee_id
的客户,则仅更改文字将排除referee_id
为NULL
的行。
您可以将其翻译为:
SELECT name
FROM customer
WHERE referee_id <> 2 or referee_id is null;
如果你这样写:
SELECT name
FROM customer
WHERE COALESCE(referee_id,2) <> 2;
它将只返回“Zack”。
如果你这样写:
SELECT name
FROM customer
WHERE COALESCE(referee_id,null, 2) <> 2;
您还将只得到 'Zack',因为 coalesce 将返回不为 null 的第一个值,如果它们都为 null,它将返回 null。
Here您可以看到所有这 3 个示例在起作用,也许会有所帮助。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(61条)