À l'aide de SQL COMME opérateur de %%
J'avais besoin pour créer une requête dans SQL Server où la condition de recherche serait d'inclure ou d'exclure une table basée sur la saisie de l'utilisateur.
Dire que j'ai deux tables, TABLE_A
et TABLE_B
avec des colonnes KEYCOLUMN_A
et COLUMN_A
dans TABLE_A
et les colonnes FKCOLUMN_B
et COLUMN_B
dans TABLE_B
.
Et une requête comme:
SELECT TABLE_A.* FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '%SEARCH2%'
Maintenant, si l'utilisateur n'a pas d'entrée SEARCH2
, je n'ai pas besoin de rechercher TABLE_B
. Mais ce serait une IF ELSE
clause. Et comme le nombre de "facultatif" tables dans la requête augmente, les permutations et les combinaisons permettrait également d'augmenter et il y aura beaucoup de IF
et ELSE
consolidés.
Au lieu de cela, j'ai décidé de garder l'énoncé tel qu'il est. Donc, si SEARCH2
est vide, la requête va effectivement devenir:
SELECT * FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '% %'
Peut l'optimiseur SQL reconnaître que LIKE %%
est aussi bon que la suppression de la condition elle-même?
Utilisez "sql-server" balises comme 1000s d'autres gens...
ne pouvez-vous pas de modifier la question pour corriger la faute de frappe?
OriginalL'auteur devanalyst | 2009-09-25
Vous devez vous connecter pour publier un commentaire.
Enrouler une
OR
autour de votre "B" de la table, tels que:De cette façon, si aucune valeur pour la chaîne, sa longueur serait de zéro, et la première partie de la
OR
serait évalué, toujours de revenir en tant que vrai et le retour de la partie de l'équation comme valide et d'ignorer l'autre moitié à l'aide de laLIKE
clause.On pourrait appliquer le même pour un nombre de tables liées que vous en avez besoin.
''
?Je suppose que ce serait trop de travail
OriginalL'auteur DRapp
Première chose, vous avez un espace dans votre exemple:
Qui ne sera jamais optimisé comme il l'est en effet une condition significative.
Maintenant, je pense que si il est optimisé à l'écart dépend du moteur de base de données et la façon intelligente elle est.
Par exemple, SQL Server 2005 offre le même plan d'exécution pour les deux types de requêtes, alors que MySQL 5.0.38 ne pas.
OriginalL'auteur Vinko Vrsalovic
COMME est utilisée avec la clause where pour rechercher, mettre à jour et supprimer un enregistrement à l'aide de cartes sauvages.
Exemple:
Pour rechercher tous les enregistrements dont le nom de l'employé est joué à partir d'un caractère 'a':
De mettre à jour tous les enregistrements dont le nom amit dont le nom de l'employé est de commencer avec un personnage, "a":
Pour supprimer tous les enregistrements dont le nom de l'employé est de commencer avec un personnage, "a":
OriginalL'auteur Kirtish Srivastava
L'opérateur LIKE est utilisé dans une clause where à la recherche d'un modèle spécifié dans une colonne
OriginalL'auteur Mike Clark
Dans MySQL vous pouvez également utiliser ILIKE, et puis il est insensible à la casse.
OriginalL'auteur Roland
La plus vaste de l'article (SQL Server) j'ai jamais vu sur le sujet
est Dynamique des Conditions de Recherche en T-SQL par Erland Sommarskog.
Le blé, merci, mais la question a été modifié (par quelqu'un d'autre que l'OP) pour inclure cette balise, après j'ai répondu.
OriginalL'auteur KM.
Vous pouvez réécrire votre requête comme ceci:
De cette façon, si paramA ou paramB est ", puis dans l'autre colonne qui est interrogé à l'intérieur même des parenthèses ne sera pas interrogé.
oui j'ai fait une faute de frappe. corrigé maintenant.
OriginalL'auteur Numenor
Utiliser de l'UNION et le bon Joint.
L' %foo% terme de recherche est assez mauvais (ne peut pas utiliser les index) sans ajouter de OU et LEN pour le mélange trop.
OriginalL'auteur gbn