3

我在 amazon redshift 中运行了以下三个查询:

select count(*)  
from t1  

计数为 1554。

select count(*)  
from t1  
where  
    item_name ilike "blue"  

计数为 62。

select count(*)  
from t1  
where  
    item_name not ilike "blue"  

计数是85。

最后两个(62 + 85)应该等于1554。我错过了什么?

4

1 回答 1

6

双引号用于标识符:"myColumn"
单引号用于值:'value'.

您的示例与这些基本语法规则相矛盾。

此外,您没有考虑NULL值,这些值都不符合以下条件:

item_name ilike 'blue'

也没有:

item_name not ilike 'blue'

你得到什么:

SELECT count(*)                             AS all_rows
     , count(item_name  ~~* 'blue' OR NULL) AS item_name_blue
     , count(item_name !~~* 'blue' OR NULL) AS item_name_not_blue
     , count(item_name)                     AS item_name_not_null
     , count(item_name IS NULL OR NULL)     AS item_name_null
FROM   t1;

~~* .. internal Postgres operator for ILIKE
!~~*.. internal Postgres operator for NOT ILIKE
(小心:运算符优先级略有不同。)

于 2013-06-28T19:14:45.073 回答