¿Cómo combino una unión a la izquierda con un similar en Sybase SQL?
-
28-10-2019 - |
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'
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)