我有一个视图,字符串使用自定义函数拆分基础表中的列。我在视图定义上也有一个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';
在最后的选择中,我注意到应该由inner where子句过滤掉的行中的数据被传递到由外部生成的stringsplit函数调用中,其中ColA ='a'子句。
我原本期望视图中的内部删除所有行,其中Status!='Completed'在ColA ='a'子句开始之前。我错过了什么吗?
由于