函数调用

时间:2018-05-08 12:45:22

标签: mysql mariadb

我有一个视图,字符串使用自定义函数拆分基础表中的列。我在视图定义上也有一个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'子句开始之前。我错过了什么吗?

由于

0 个答案:

没有答案