Oracle:从视图中选择,但是来自目标表的where子句值

时间:2016-04-30 13:43:32

标签: sql oracle

TARGET_TABLE:

id   | col1 
------------
1      'mySample1234'
2      'mySample3456'

MY_VEIW的当前sql:

select substr(col1,-4,4) from TARGET_TABLE;

我的查询:

select * from MY_VEIW where col1 = 'mySample1234';

我的结果:

Empty

预期结果:

id   | col1
------------
1      '1234'

换句话说,我想选择TARGET_TABLE'的价值,尽管有MY_VIEW'的过滤值。

如何实现?

3 个答案:

答案 0 :(得分:1)

尝试使用Regexp_replace

select regexp_replace(col1 , '[A-Za-z]') 
From TARGET_TABLE

答案 1 :(得分:1)

我不确定我理解...你的基表中是否有一个名为col1的列,然后你提取最后四个字符,将它们放在视图中名为col1的列中,然后你要选择从视角来看?

如果是这样 - 我理解' 1234'是mySample1234'的最后四个字符。完整的字符串在基表中,' 1234'在视图中。您如何期待' 1234' =' mySample1234'什么都不假呢? MY_VIEW中的col1只是' 1234'而不是完整的原始字符串。

要从MY_VIEW返回行,必须使用WHERE col1 = '1234'进行过滤。或者,如果您尝试查看TARGET_TABLE中col1的最后四个字符是否与较长字符串的最后四个字符匹配,则可以使用{{ 1}}(或SUBSTR中的任何其他比较字符串)。

ADDED :如果您尝试将MY_VIEW中的col1与TARGET_TABLE中的相应col1匹配,例如在联接中,您可以这样写:

WHERE col1 = SUBSTR('mySample1234', -4)

答案 2 :(得分:0)

只需使用两个参数:

select substr(col1, -4)
from TARGET_TABLE;

但是,如果这不起作用:

select * from MY_VEIW where col1 = 'mySample1234';

然后原因是col1位于基础而不是视图中。我想你想要:

create view my_view as
    select col1, substr(col1, -4) as last4
    from TARGET_TABLE;

然后你可以使用:

select *
from MY_VEIW
where col1 = 'mySample1234';

或者:

select *
from MY_VEIW
where last4 = '1234';