首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列等价,包括空值

问列等价,包括空值
EN

Stack Overflow用户
提问于 2015-02-27 06:34:28
回答 2查看 38关注 0票数 0

有更好的方法来做以下工作来获得等价性吗?

代码语言:javascript
复制
SELECT * FROM table
WHERE
  ((accepted_imdb_url = imdb_url) OR (imdb_url IS NULL and accepted_imdb_url IS NULL))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 06:48:44

标准的SQL答案是使用a IS DISTINCT FROM b / a IS NOT DISTINCT FROM b。然而,MySQL不支持这一点。MySQL支持自己的发明,实现了同样的效果:<=>操作符。

代码语言:javascript
复制
SELECT *
FROM table
WHERE accepted_imdb_url <=> imdb_url
票数 5
EN

Stack Overflow用户

发布于 2015-02-27 06:42:05

使用COALESCE

代码语言:javascript
复制
SELECT * 
FROM table
WHERE COALESCE(accepted_imdb_url, '#') = COALESCE(imdb_url, '#')

如果这两个字段都不是NULL,那么上面的WHERE子句归结为:

代码语言:javascript
复制
WHERE accepted_imdb_url = imdb_url

如果这两个字段都是NULL,那么WHERE子句将变成:

代码语言:javascript
复制
WHERE '#' = '#'

如果只有一个是NULL,那么WHERE就相当于:

代码语言:javascript
复制
WHERE accepted_imdb_url = '#'  

或

代码语言:javascript
复制
WHERE '#' = imdb_url

因此,如果url字段的类型为VARCHAR,且所有这些字段都不能等于#,则建议的WHERE子句等效于OP的子句。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28758947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档