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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé 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
    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.

  2. #2
    Membre confirmé 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
    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 ','.

  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 999
    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 999
    Billets dans le blog
    6
    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 confirmé 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
    Par défaut
    Merci je vais lire cela attentivement.

  5. #5
    Membre confirmé 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
    Par défaut
    Cela fonctionne dans le query analyser sur SQL 2000, cependant la même requête ne fonctionne pas sous SQL CE.

+ 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