如何在Sybase SQL中将左连接与类似组合?

时间:2011-05-04 09:53:44

标签: sql left-join sybase-ase sql-like

我很难在Sybase中尝试将like左连接结合使用。

例如(虽然在我的情况下它有点复杂),但我正在寻找既不包含o也不包含i的文字。

我能够做相反的事情,即包含以下任一字母的文字:

select numbers.name from 
(
      select 'one'   name union all
      select 'two'   name union all
      select 'three' name union all -- neither %o% nor %i%
      select 'four'  name union all
      select 'five'  name union all
      select 'six'   name union all
      select 'seven' name union all -- neither %o% nor %i%
      select 'eight' name union all
      select 'nine'  name union all
      select 'ten'   name           -- neither %o% nor %i%
) numbers,
(
      select '%o%'  expression union all
      select '%i%'  expression       
) patterns
where
  numbers.name like patterns.expression

按预期选择除threeseventen以外的所有记录。

现在,我正在寻找找到这三条记录的方法。我想左边用模式加入数字,然后过滤表达式为null。像这样:

numbers.name *like patterns.expression and
patterns.expression is null

显然,这不起作用。所以,我很高兴任何指针都指向正确的方向。

对于它的价值,这是我正在研究的版本:

select @@version
'Adaptive Server Enterprise/15.0.3/EBF 17156 ESD#3/P/Sun_svr4/OS 5.8/ase1503/2726/64-bit/FBO/Fri Feb  5 05:26:23 2010'

1 个答案:

答案 0 :(得分:0)

你应该使用NOT EXISTS(就是这种情况):

select numbers.name from 
(
      select 'one'   name union all
      select 'two'   name union all
      select 'three' name union all -- neither %o% nor %i%
      select 'four'  name union all
      select 'five'  name union all
      select 'six'   name union all
      select 'seven' name union all -- neither %o% nor %i%
      select 'eight' name union all
      select 'nine'  name union all
      select 'ten'   name           -- neither %o% nor %i%
) numbers
where not exists (select null
                    from (
                             select '%o%'  expression union all
                             select '%i%'  expression
                         ) patterns
                   where numbers.name like patterns.expression)