Comment combiner une jointure gauche avec une jointure similaire dans Sybase SQL?
-
28-10-2019 - |
Question
Je suis bloqué en essayant de combiner un like
avec une jointure gauche dans Sybase.
Par exemple (même si dans mon cas c'est un peu plus compliqué), je recherche du texte qui ne contient ni o
ni i
.
Je suis capable de faire le contraire, c'est-à-dire du texte contenant l'une de ces lettres:
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
sélectionne tous les enregistrements sauf three
, seven
et ten
comme prévu.
Maintenant, je cherche un moyen de trouver ces trois disques.J'ai pensé à joindre à gauche des nombres avec des motifs , puis à filtrer l'expression étant nulle.Quelque chose comme ça:
numbers.name *like patterns.expression and
patterns.expression is null
De toute évidence, cela ne fonctionne pas.Donc, je serais heureux pour tout pointeur donné dans la bonne direction.
Pour ce que ça vaut, voici la version sur laquelle je travaille:
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'
La solution
Vous devriez utiliser NOT EXISTS
(c'est le cas):
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)