Pregunta

Estoy atrapado tratando de combinar un like con un Se unió a la izquierda En Sybase.

Por ejemplo (aunque en mi caso es un poco más complicado), estoy buscando texto que ninguno contenga un o ni i.

Puedo hacer lo contrario, es decir, texto que contiene cualquiera de estas letras:

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

Selecciona todos los registros excepto three, seven y ten como se esperaba.

Ahora, estoy buscando una manera de encontrar estos tres registros. Pensé en unirme a la izquierda números con patrones y luego filtrando la expresión siendo nula. Algo como esto:

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

Obviamente, esto no funciona. Entonces, estaría feliz por cualquier puntero dado en la dirección correcta.

Por lo que vale, esta es la versión en la que estoy trabajando:

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'
¿Fue útil?

Solución

Deberías usar NOT EXISTS (es el caso):

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top