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

MS SQL Server Discussion :

[MsSQL-2005] clause WHERE avec opérateur OR


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut [MsSQL-2005] clause WHERE avec opérateur OR
    Bonjour,

    Je sais pas si le titre de mon poste est assez parlant.

    Je rencontre actuellement un petit soucis avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<>
    -- Create date: <10/02/2009>
    -- Description:	<Fonction affichant les informations importantes recapitulant les bons peintures
    -- suite au traitement en peinture>
    -- =============================================
    ALTER PROCEDURE [dbo].[DEV_PS_Select_infos_bon_partie_peinture]
    	-- Add the parameters for the stored procedure here
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
    	SELECT 
    	date_demandeur,
    	id_bon_peinture,
    	nom_bon_peinture,
    	nom_utilisateur,
    	prenom_utilisateur,
    	numBB,
    	num_secteur,
    	delais
    	FROM DEV_BON_PEINTURE,DEV_SECTEUR,DEV_UTILISATEUR
    	WHERE id_etape=8 
    	OR id_etape=5
    	OR id_etape=11
    	AND DEV_BON_PEINTURE.id_DEMANDEUR=DEV_UTILISATEUR.id_UTILISATEUR 
    	AND DEV_UTILISATEUR.id_secteur=DEV_SECTEUR.id_secteur
    	ORDER BY date_demandeur DESC
    END
    Il semble m'afficher tout les résultats possible, produit scalaire entre les tables DEV_BON_PEINTURE / DEV_SECTEUR / DEV_UTILISATEUR.

    En fait je recherche a récupérer les informations des bons qui sont soit en id_etape=8 soit en id_etape=5 soit en id_etape=11.

    cordialement

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour,

    Je me réponds à moi même, je ne savais pas si cette syntaxe était possible mais elle semble marcher.

    J'ai rajouté des parenthèses autour de la condition WHERE, et il semble me retourner les bonnes informations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<>
    -- Create date: <10/02/2009>
    -- Description:	<Fonction affichant les informations importantes recapitulant les bons peintures
    -- suite au traitement en peinture>
    -- =============================================
    ALTER PROCEDURE [dbo].[DEV_PS_Select_infos_bon_partie_peinture]
    	-- Add the parameters for the stored procedure here
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
    	SELECT 
    	date_demandeur,
    	id_bon_peinture,
    	nom_bon_peinture,
    	nom_utilisateur,
    	prenom_utilisateur,
    	numBB,
    	num_secteur,
    	delais
    	FROM DEV_BON_PEINTURE,DEV_SECTEUR,DEV_UTILISATEUR
    	WHERE (id_etape=8 OR id_etape=5	OR id_etape=11)
    	AND DEV_BON_PEINTURE.id_DEMANDEUR=DEV_UTILISATEUR.id_UTILISATEUR 
    	AND DEV_UTILISATEUR.id_secteur=DEV_SECTEUR.id_secteur
    	ORDER BY date_demandeur DESC
    END
    Par contre est-ce la bonne méthode ?

    cordialement

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    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 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    NON, la bonne méthode c'est de faire des jointures avec JOIN. Cela fait 17 ans que la syntaxe JOIN est apparu dans le SQL. Il serait temps de se mettre à la page et ceci vous aurait évité l'erreur !
    Utiliser des alias et placer du IN lorsque cela est possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT date_demandeur,
    	   id_bon_peinture,
           nom_bon_peinture,
           nom_utilisateur,
    	   prenom_utilisateur,
    	   numBB,
    	   num_secteur,
    	   delais
     
    FROM   DEV_UTILISATEUR AS DU
     
           INNER JOIN DEV_SECTEUR AS DS
                 ON DU.id_secteur = DV.id_secteur
     
           INNER JOIN DEV_BON_PEINTURE AS DBP
                 ON DU.id_UTILISATEUR = DBP.id_DEMANDEUR
     
    WHERE id_etape IN(8, 5 11)
     
    ORDER BY date_demandeur DESC
    Bref, apprenez SQL, mon site web comme mes bouquins peuvent vous y aider !
    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/ * * * * *

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour

    Et merci pour votre réponse.

    J'avais complétement zappé l'utilisation du IN pour une liste de valeur.

    Je viens de lire votre documentation sur les jointure :

    http://sqlpro.developpez.com/cours/sqlaz/jointures/.

    J'avoue avoir du avec la syntaxe INNER JOIN.

    Encore merci

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    J'avoue avoir du avec la syntaxe INNER JOIN.
    C'est la même chose que la spécification de vos jointures avec un WHERE / AND, en plus moche, moins puissant et moins lisible

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    C'est la même chose que la spécification de vos jointures avec un WHERE / AND, en plus moche, moins puissant et moins lisible
    Bonjour,

    euh la j'avoue être perdu.

    Quel est alors la meilleur notation ?

    Car il semble dans la doc ici page 15 :

    http://sqlserver.developpez.com/cours/TSQL/

    Que ma notation est à proscrire car elle génère un excès de travail

    D'ailleur je viens de lire cette note que vous avez rédigé :

    http://blog.developpez.com/elsuket/p...ures/#more7101

    Aurais-je mal compris votre précédent message ?

    ++

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Aurais-je mal compris votre précédent message ?
    Vous l'avez bien compris, il est préférable d'utiliser l'opérateur JOIN.
    C'est moi qui me suis mal exprimé, désolé

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete SQL clause WHERE avec variable
    Par gabule dans le forum JDBC
    Réponses: 6
    Dernier message: 09/01/2019, 11h04
  2. Clause where avec une date..
    Par bobic dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/04/2008, 16h12
  3. Clause WHERE avec numéro de colonne au lieu du nom
    Par droog dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 17/10/2007, 23h41
  4. Clause WHERE avec CURDATE()
    Par etiennelj dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/07/2007, 16h13
  5. [Oracle / Sql] clause where avec resultat d'une requete
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 31/01/2006, 09h37

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