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 :

Requête DELETE avec jointure


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de Roach-
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 108
    Points
    108
    Par défaut Requête DELETE avec jointure
    Bon j'ai fait une requête SQL pour effacer une ligne dans une table d'association. Cependant je ne peu pas croire qui n'y a pas plus simple que ceci :

    SQL : Microsoft SQL CE

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    DELETE 
    FROM vehasssection
    WHERE ID_Vehlisting =
    (
    SELECT vehasssection.ID_Vehlisting
    FROM vehasssection 
    JOIN vehlocation ON vehlocation.ID = vehasssection.ID_Location
    JOIN vehsection ON vehsection.ID = vehasssection.ID_Section
    JOIN vehposition ON vehposition.ID = vehasssection.ID_Position
    WHERE vehasssection.ID_Vehlisting = '3'
    AND vehlocation.Name = 'Exterior'
    AND vehsection.Name = 'LeftFront'
    AND vehposition.Name = 'Fender'
    )
    AND ID_Location =
    (
    SELECT vehasssection.ID_Location
    FROM vehasssection 
    JOIN vehlocation ON vehlocation.ID = vehasssection.ID_Location
    JOIN vehsection ON vehsection.ID = vehasssection.ID_Section
    JOIN vehposition ON vehposition.ID = vehasssection.ID_Position
    WHERE vehasssection.ID_Vehlisting = '3'
    AND vehlocation.Name = 'Exterior'
    AND vehsection.Name = 'LeftFront'
    AND vehposition.Name = 'Fender'
    )
    AND ID_Section =
    (
    SELECT vehasssection.ID_Section
    FROM vehasssection 
    JOIN vehlocation ON vehlocation.ID = vehasssection.ID_Location
    JOIN vehsection ON vehsection.ID = vehasssection.ID_Section
    JOIN vehposition ON vehposition.ID = vehasssection.ID_Position
    WHERE vehasssection.ID_Vehlisting = '3'
    AND vehlocation.Name = 'Exterior'
    AND vehsection.Name = 'LeftFront'
    AND vehposition.Name = 'Fender'
    )
    AND ID_Position =
    (
    SELECT vehasssection.ID_Position
    FROM vehasssection 
    JOIN vehlocation ON vehlocation.ID = vehasssection.ID_Location
    JOIN vehsection ON vehsection.ID = vehasssection.ID_Section
    JOIN vehposition ON vehposition.ID = vehasssection.ID_Position
    WHERE vehasssection.ID_Vehlisting = '3'
    AND vehlocation.Name = 'Exterior'
    AND vehsection.Name = 'LeftFront'
    AND vehposition.Name = 'Fender'
    )
    Je trouve cela gros pour une simple supression de ligne.
    Roach aka Jean-François Dufour

  2. #2
    Membre régulier Avatar de Roach-
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 108
    Points
    108
    Par défaut
    Selon la donc je pourrais le faire de cette facon :

    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
     
    DELETE 
    FROM vehasssection
    WHERE (ID_Vehlisting, ID_Location, ID_Section, ID_Position) =
    (
    SELECT vehasssection.ID_Vehlisting, vehasssection.ID_Location, vehasssection.ID_Section, vehasssection.ID_Position
    FROM vehasssection 
    JOIN vehlocation ON vehlocation.ID = vehasssection.ID_Location
    JOIN vehsection ON vehsection.ID = vehasssection.ID_Section
    JOIN vehposition ON vehposition.ID = vehasssection.ID_Position
    WHERE vehasssection.ID_Vehlisting = '3'
    AND vehlocation.Name = 'Exterior'
    AND vehsection.Name = 'LeftFront'
    AND vehposition.Name = 'Fender'
    )
    Cependant cela me donne cette erreur :

    Line 3: Incorrect syntax near ','.
    Roach aka Jean-François Dufour

  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 837
    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 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Non, car MS SQL Server n'accepte pas le Row Value Constructor (pour en comprendre la technique, lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/sqlaz/select/#L8)

    Mais en revanche SQL Server permet une syntaxe particulière avec un double FROM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DELETE FROM vehasssection
     
    FROM   vehasssection V
           INNER JOIN vehlocation L
                 ON L.ID = V.ID_Location
           INNER JOIN vehsection S
                 ON S.ID = V.ID_Section
           INNER JOIN vehposition P
                 ON P.ID = V.ID_Position
     
    WHERE V.ID_Vehlisting = '3'
      AND L.Name = 'Exterior'
      AND S.Name = 'LeftFront'
     AND  P.Name = 'Fender'
    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/ * * * * *

  4. #4
    Membre régulier Avatar de Roach-
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 108
    Points
    108
    Par défaut
    Merci je vais lire cela attentivement.
    Roach aka Jean-François Dufour

  5. #5
    Membre régulier Avatar de Roach-
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 108
    Points
    108
    Par défaut
    Cela fonctionne dans le query analyser sur SQL 2000, cependant la même requête ne fonctionne pas sous SQL CE.
    Roach aka Jean-François Dufour

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

Discussions similaires

  1. [Access] Prob ds un Delete avec jointure
    Par fikou dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 25/06/2009, 00h04
  2. Requête DELETE avec jointure
    Par fcpwns dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/06/2009, 23h20
  3. [MySQL] requête combinée avec jointure ?
    Par steve o'steen dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 18/10/2006, 14h43
  4. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37
  5. Delete avec jointure impossible
    Par _developpeur_ dans le forum Access
    Réponses: 13
    Dernier message: 18/11/2005, 16h22

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