IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Modification Une requéte avec Multi Like vers IN


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    dba
    Inscrit en
    Décembre 2016
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : dba
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2016
    Messages : 119
    Par défaut Modification Une requéte avec Multi Like vers IN
    bonjour a tous

    Qui a une idée comment je peut transférer une requête avec Multi Like vers une requête avec une instruction IN

    Ma Requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select  distinct(ref_produit) from  Distind_PROD.dbo.produits p4 
    where [ref_produit] like 'ford%' or [ref_produit] like 'volvo%' or [ref_produit] like 'bmw%' OR  [ref_produit] like 'opel%'
    j'aimerai avoir ce syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select  distinct(ref_produit) from  Distind_PROD.dbo.produits p4 
    where [ref_produit] in ( 'ford%' , 'volvo%' ,  'bmw%' ,'opel%' )
    merci pour vos aides

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Pas possible le IN et le LIKE sont deux opérateurs différentes et par conséquent incompatible....

    Néanmoins je crois que votre problématique relève plus de l'indexation textuelle !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Si c'est juste pour la lisibilité/maintenance, vous avez une alternative

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select  distinct(ref_produit) from  Distind_PROD.dbo.produits p4 
    INNER JOIN (VALUES('ford%'),('volvo%'),('bmw%'),('opel%')) AS T(kw) 
    	ON p4.ref_produit LIKE kw
    Si c'est pour les performances, pas sûr que ça change quoique que se soit. Dans ce cas, c'est plutôt le modèle qu'il faudrait revoir, il n'est à priori pas normal que vous ayez à faire ceci (on pourrait vous en dire plus si vous nous communiquez la structure de la table, en expliquant un peu le contexte)

  4. #4
    Membre très actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 261
    Par défaut
    Bonjour,

    Si la réponse de SQLPRO est la bonne, je me permet une petite observation, qui peut être bonne ou pas (tout depend de la tête de votre chaine...).
    En effet, dans votre cas précis, la marque de la voiture semble être toujours au début de votre chaine. Si il y a un espace derrière ou quelconque délimiteur; vous avez toujours la possibilité de couper la chaine à ce niveau et de le mettre dans un IN


    Mais il ne s'agit que de supposition, bien entendu, comme on ne connait pas vos syntaxe

    Bisous bisous

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par JeanYvette Voir le message
    vous avez toujours la possibilité de couper la chaine à ce niveau et de le mettre dans un IN
    L’inconvénient de cette méthode, c'est qu'en appliquant une fonction sur la colonne, cela empêche l'utilisation d'index sur cette colonne...

  6. #6
    Membre très actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 261
    Par défaut
    En effet, on quitte un problème pour en trouver un outre malheureusement... A voir après les besoins en termes d'optimisation et surtout le nombre de lignes dans ces tables. Potentiellement ce problème sur index n’amènera rien

    Après le but surtout est de montrer ce que disait Michel.priori, la table marque est-elle absente ? De plus, si il y a une suite à la marque on peut imaginer qu'il s'agit du modèle, une table de modèle serait-elle aussi absente ?

  7. #7
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 963
    Par défaut
    Bonjour,

    Bien vu @JeanYvette !

    L'utilisation de la colonne [ref_produit] pour déterminer la marque est :
    - une erreur de conception
    - une erreur de requête : la table [marque] a été oubliée dans les jointures, ce qui force à bricoler.

    Question : existe-t'il une table [marque] (différente de la table [produits]) ?

Discussions similaires

  1. Modification d'une requête avec inner join
    Par Msysteme dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/04/2018, 23h10
  2. [MySQL-5.1] Optimisation d'une requête avec multi-JOIN
    Par berthomhc dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/11/2016, 21h21
  3. Réponses: 3
    Dernier message: 12/12/2013, 18h57
  4. [MySQL] Mettre un score (valeur) sur une requête avec LIKE
    Par yule dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/10/2010, 16h05
  5. [SQL] Erreur sur une requète avec un Like
    Par heruwenli dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/05/2007, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo