Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有没有一个场景可以让我们像其他场景一样使用NOT?_Sql_Postgresql_Teradata - Fatal编程技术网

Sql 有没有一个场景可以让我们像其他场景一样使用NOT?

Sql 有没有一个场景可以让我们像其他场景一样使用NOT?,sql,postgresql,teradata,Sql,Postgresql,Teradata,在查询Teradata时,我被发现使用了而不是任何关键字。 通过用纯英语解析关键字,我希望查询返回与参数列表中的值不同的任何值 但是,由于语句生成的布尔逻辑(即不象X或不象Y),表中的所有值都被返回。我实际需要的关键字是不喜欢所有的(即不喜欢X,也不喜欢Y) : 我理解返回这些结果背后的基本逻辑,但我的问题是,在任何情况下,使用而不是像任何 如果没有,数据库引擎是否有充分的理由支持此关键字,因为基于关键字的纯英语解释可能存在歧义?如果您使用的是ANY而不是ALL,则不排除任何行。在这里,任何都会

在查询Teradata时,我被发现使用了
而不是任何
关键字。
通过用纯英语解析关键字,我希望查询返回与参数列表中的值不同的任何值

但是,由于语句生成的布尔逻辑(即
不象X或不象Y
),表中的所有值都被返回。我实际需要的关键字是
不喜欢所有的
(即
不喜欢X,也不喜欢Y

:

我理解返回这些结果背后的基本逻辑,但我的问题是,在任何情况下,使用<代码>而不是像任何


如果没有,数据库引擎是否有充分的理由支持此关键字,因为基于关键字的纯英语解释可能存在歧义?

如果您使用的是
ANY
而不是
ALL
,则不排除任何行。在这里,
任何
都会像
一样工作。因此,在任何您想在
中为使用
的场景中,您都可以使用
任何


最好不要使用
ANY
,因为我们正在生成一个等于不等于的。即它与

中的
相同是的,它确实有意义,只需稍加修改

以这个查询为例:

SELECT g
FROM generate_series(9995, 10005) g
WHERE g::TEXT NOT LIKE ANY(ARRAY['9996','9997'])
如果
g
与它们中的任何一个都不相似,则返回TRUE。感兴趣的项目编号为9996和9997。9996与数组中第一项的
不相似
比较结果为FALSE,因为9996与
不相似
9996。但是我们正在寻找任何匹配,所以我们继续下一个。9996与9997不同,因此评估是真实的,并且包含9996。比较9997时相同,但第一次比较返回TRUE。因此,将选择生成_系列中的所有编号

现在稍微改变一下:

SELECT g
FROM generate_series(9995, 10005) g
WHERE NOT g::TEXT LIKE ANY(ARRAY['9996','9997'])
因为比较返回TRUE时,对ANY的计算就停止了(我试图找到此项的官方来源,但无法找到,尽管我以前读过它,而且它是有意义的),当使用
LIKE
将9996与9996进行比较时,
ANY
搜索会中止,因为找到了匹配项。然后这被
NOT
否定,因此从结果中排除9996

9997的情况与此类似,只是第一次比较不正确,所以它会继续到下一次比较,也就是说,然后正确的被否定为错误。其余的数字不匹配,因此ANY返回FALSE,该值被反为TRUE

如果此查询是除9996和9997之外的所有生成_系列的数字,则返回结果


顺便说一句,如果数组只有一个值,那么
g::TEXT NOT LIKE ANY([您的数组])
将返回预期结果。

您可以在SQL中执行许多愚蠢的操作:-)确实不需要
NOT LIKE ANY
,但是由于语法允许否定任何条件,因此必须支持它。顺便说一句,大多数人(包括我自己)确实在涉及
而不是
的布尔逻辑方面存在问题,这是一个好的观点。我自己也做过不少蠢事。我想我已经考虑过,大多数关键字都是为特定目的而设计的,而不是由布尔逻辑的组件构建的#1转换为
g不喜欢9996或g不喜欢9997
,而#2转换为
g不喜欢9996和g不喜欢9997
,这很有趣。我想我认为
不喜欢任何
本身就是一个关键词,而不是由
喜欢
任何
关键词组成。我想我理解它是如何评估上面两个例子中的不同值的。尽管如此,我仍然希望它的计算结果是
不(像任何(X,Y))
,而不是
不像(任何(X,Y))
。。。。虽然我还是不确定我是否正确。德诺思一针见血。。。否定条件逻辑令人困惑
SELECT g
FROM generate_series(9995, 10005) g
WHERE NOT g::TEXT LIKE ANY(ARRAY['9996','9997'])