为啥这条 SQL 语句不起作用?
Posted
技术标签:
【中文标题】为啥这条 SQL 语句不起作用?【英文标题】:Why won't this SQL statement work?为什么这条 SQL 语句不起作用? 【发布时间】:2008-10-27 15:54:29 【问题描述】:我有以下 SQL 语句:
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';
它在 Postgres 上运行良好(从日志中返回所有不同的名称,它们不为空并且包含字符串 '.EDIT')。但在 Oracle 上,这条语句不起作用。知道为什么吗?
【问题讨论】:
【参考方案1】:SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';
1) Oracle 将 '' 视为 NULL,这意味着比较 "NOT name = ''" 永远不会为真或假;改用“IS NOT NULL”。但是……
2) 第二个条件“name LIKE '%.EDIT%' 无论如何都不会匹配一个空字符串,使得第一个条件变得多余。
所以改写为:
SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%';
【讨论】:
感谢您的帮助。它工作正常!对于多余的东西,我真是个白痴。但我也不知道,Oracle 将 '' 视为 NULL。谢谢,现在可以了。【参考方案2】:Oracle中的空字符串相当于NULL,导致比较失败。 将查询的那部分更改为 NAME IS NOT NULL
【讨论】:
【参考方案3】:您可以在没有“NOT NAME=''”子句的情况下重写该查询。
SELECT DISTINCT name
FROM log
WHERE name LIKE '%.EDIT%';
这对你有用吗?
如果不是,它在什么方面不起作用?它会导致错误吗?是否返回了错误的结果?
请使用此信息扩展您的问题 :-)
【讨论】:
以上是关于为啥这条 SQL 语句不起作用?的主要内容,如果未能解决你的问题,请参考以下文章