以下查询会返回不同的结果有什么原因吗?
select count(id)
from mytable
where
status='active'
and ((textfield1 ilike '%needle%') or (textfield2 ilike '%needle%'));
对比
select count(id)
from mytable
where
status='active'
and ((textfield1 || textfield2) ilike '%needle%');
当我运行这些查询时,前者正在返回26
而后者19
。
我犯了什么愚蠢的错误?
你有空值吗?如果是,则第二种形式将被评估为空。
例如:
这样,第二种形式可以比第一种形式具有更少的值。
尝试这个:
是的,原因是查询在逻辑上不等价。
只需放置
textfield1 = 'I need'
and 或textfield2 = 'lemons'
。然后
(textfield1 ilike '%needle%') or (textfield2 ilike '%needle%')
求值为 , 但false
求值为。
textfield1 || textfield2 = 'I needlemons'
(textfield1 || textfield2) ilike '%needle%'
true