我有一个视图,它使用自定义函数将基础表中的一列拆分为string。我在视图定义中还有一个where子句,用于限制返回的行。当我从没有where子句的视图中选择时,一切都按预期工作。当我在视图本身上添加一个where子句,并在函数生成的一列上添加一个过滤器时,它似乎没有在视图定义上使用内部where子句来确定哪些行被传递给外部where子句调用的函数。
最好用一个例子来解释这一点。我用的是mariadb 10.2.11
Table T1
ID Text Status
1 a,b,c Completed
2 a,b,c,d Failed
3 a,b,c Completed
4 a,b,c Completed
view C1 defined as
select id,
stringsplit(Text,1) as ColA,
Status
from T1
where Status = 'Completed';
select * from C1 where ColA = 'a';
在最后的select中,我注意到应该由内部where子句过滤掉的行中的数据被传递到由outer where cola='a'子句生成的stringsplit函数调用中。
我本以为视图的内部where会删除所有where status!='完成'before where cola='a'子句。我错过什么了吗?
谢谢
暂无答案!
目前还没有任何答案,快来回答吧!