À l'aide de et DANS et une sous-Requête dans une seule Instruction SQL
Je suis en train d'écrire une requête dans laquelle je suis en train de rechercher une sous-requête/CTE pour un générique de sous-chaîne, et l'imbrication de cette logique dans mon CAS. Par exemple:
SELECT
CASE
WHEN '%' + text + '%' IN (SELECT Column1 FROM Table) THEN 'I am in Column1'
ELSE text END
FROM Table
Malheureusement, il semble comme il n'est pas possible de le faire. Depuis que j'aurais besoin d'utiliser l'opérateur LIKE et il n'y a aucune façon de les utiliser et DANS. Je devrais écrire COMME chaque déclaration séparément, et ce serait pour+ de 1000 lignes. Personne ne recommandons une solution plus immédiate? Merci de bien vouloir à l'avance!
--
Edit: Désolé, quelques éclaircissements par les commentaires. Un meilleur exemple:
UserID | UserPeers | Gender
--------------------------------------------
Mike | Tom1, Bob1 | M
John | Tom1, Greg1 | M
Sally |Mike1, John1 | F
Sara | Sally1, Bob1 | F
Dans le tableau ci-dessus, j'ai besoin de rechercher les sous-chaînes dans UserPeers colonnes pour voir si elles existent, n'importe où dans le nom de la colonne. Les lignes qui pourraient être retournés avec succès dans ce cas serait de ceux en vertu de Sally et de Sara, depuis 'Mike' et 'Sally' exister en vertu de l'Identifiant.
SELECT *
FROM Users
WHERE '%' + UserPeers + '%' LIKE (SELECT UserID FROM Users)
L'erreur renvoyée est ici:
La sous-requête a retourné plus de valeur 1. Ce n'est pas permis lorsque la sous-requête suit =, !=, <, <= , >, >= ou lorsque la sous-requête est utilisée comme une expression.
Pas sûr que j'ai suivi. Voulez-vous simplement à comparer les
text
colonne avec Column1
dans la même ligne? Est text
une variable ou un nom de colonne?Merci à tous pour la somme de réponses, Aaron réponse initiale a fait le tour. Coincé sur le COMME. Merci beaucoup!
OriginalL'auteur dmedz | 2013-03-31
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Aaron Bertrand
Ici est une approche:
Votre requête initiale semblait avoir les caractères génériques sur le mauvais côté de la
like
.OriginalL'auteur Gordon Linoff
Vous pouvez essayer quelque chose comme ceci:
sélectionnez
cas quand (select count(*) from table where colonne1 comme ('%' + texte + '%')) > 0 then 'je suis dans colonne1'
d'autre texte
fin
à partir de la table
EXISTS
est garanti d'être pas pire, mais peuvent souvent être beaucoup mieux.Bon à savoir, merci.
OriginalL'auteur Dave Jorgenson
Probablement vous n'avez pas vraiment besoin
Like
etIN
Oui, je veux dire la sous-requête en corrélation, mais je ne suis pas sûr que @thoughtExperiment besoin d'une clé=clé.
Pas sûr non plus. Si je ont été compte tenu de ces exigences, je l'aurais jeté en arrière; dans ce cas, tout ce que nous pouvons faire est de deviner. 🙂
OriginalL'auteur ljh