有更好的方法来做以下工作来获得等价性吗?
SELECT * FROM table
WHERE
((accepted_imdb_url = imdb_url) OR (imdb_url IS NULL and accepted_imdb_url IS NULL))发布于 2015-02-27 06:48:44
标准的SQL答案是使用a IS DISTINCT FROM b / a IS NOT DISTINCT FROM b。然而,MySQL不支持这一点。MySQL支持自己的发明,实现了同样的效果:<=>操作符。
SELECT *
FROM table
WHERE accepted_imdb_url <=> imdb_url发布于 2015-02-27 06:42:05
使用COALESCE
SELECT *
FROM table
WHERE COALESCE(accepted_imdb_url, '#') = COALESCE(imdb_url, '#')如果这两个字段都不是NULL,那么上面的WHERE子句归结为:
WHERE accepted_imdb_url = imdb_url如果这两个字段都是NULL,那么WHERE子句将变成:
WHERE '#' = '#'如果只有一个是NULL,那么WHERE就相当于:
WHERE accepted_imdb_url = '#' 或
WHERE '#' = imdb_url因此,如果url字段的类型为VARCHAR,且所有这些字段都不能等于#,则建议的WHERE子句等效于OP的子句。
https://stackoverflow.com/questions/28758947
复制相似问题