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

  1. #1
    Membre du Club
    Homme Profil pro
    dba
    Inscrit en
    Décembre 2016
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Jura (Franche Comté)

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

    Informations forums :
    Inscription : Décembre 2016
    Messages : 119
    Points : 58
    Points
    58
    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
    21 766
    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 : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    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
    Points : 13 092
    Points
    13 092
    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 averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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 : 257
    Points : 395
    Points
    395
    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
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    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]) ?
    Le savoir est une nourriture qui exige des efforts.

  6. #6
    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
    Points : 13 092
    Points
    13 092
    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...

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    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 : 257
    Points : 395
    Points
    395
    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 ?

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    la solution la plus simple est de faire une jointure avec la table des marques sur laquelle on appliquera la restriction souhaitée.

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