在查詢Teradata時,我被使用NOT LIKE ANY
關鍵字發現。
從簡單的英語解析關鍵字,我希望查詢返回任何值不像參數列表中的值。有什麼情況下使用不像任何東西是有道理的?
但是,由於該語句生成的布爾邏輯(即NOT LIKE X OR NOT LIKE Y
),表中的所有值都被返回。我實際需要的關鍵字是NOT LIKE ALL
(即NOT LIKE X AND NOT LIKE Y
)。
CREATE TABLE t
("col" varchar(7))
;
INSERT INTO t
("col")
VALUES
('Andrew'),
('Annie'),
('Bob'),
('Bowie'),
('Charles')
;
/* Returns 'Charles' */
select col
from t
where col not like all (array[ 'An%', 'Bo%' ])
;
/* Returns all values in table */
select col
from t
where col not like any (array[ 'An%', 'Bo%' ])
;
我理解其背後的原因正在返回這些結果的基本邏輯,但我的問題是,是否有任何環境,此時將是有意義的使用NOT LIKE ANY
?
如果沒有,數據庫引擎是否有足夠的理由支持這個關鍵字,因爲基於簡單英文解釋關鍵字的可能性不明確?
你可以在SQL中做很多愚蠢的事情:-)真的不需要'NOT LIKE ANY',但由於語法允許否定任何條件,因此必須支持它。順便說一句,大多數人(包括我自己)在布爾邏輯方面存在問題,涉及'NOT' – dnoeth
是的好點。我自己已經完成了我愚蠢的事情。我想我已經考慮過,大多數關鍵字都是爲特定目的而設計的,而不是由布爾邏輯的組成部分構建的布爾邏輯 – Alex