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

Langage SQL Discussion :

[requet delete] Probleme de suppression


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut [requet delete] Probleme de suppression
    Bonjour, j'ai deux tables avec 5 champs communs qui forme une clé.
    Je dois supprimer les champs d'une table, qui sont contenu dans les deux tables.
    Ce matin, j'ai pas les yeux en face des trous et je bloc :S

    J'ai deux requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    delete from tempdb..CalyonOpeTitre
    where (INST_NUM,PF_COD,INST_PRICE,INST_QTY,XACT_TYP)
    in (select INST_NUM,PF_COD,INST_PRICE,INST_QTY,XACT_TYP from ID_XACT)
     
     
    ou
     
     
    delete from tempdb..CalyonOpeTitre
    where (INST_NUM,PF_COD,INST_PRICE,INST_QTY,XACT_TYP)
    = (select INST_NUM,PF_COD,INST_PRICE,INST_QTY,XACT_TYP from ID_XACT)
    Ca passe pas..... et

    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 tempdb..CalyonOpeTitre as ope
    where
    ope.INST_NUM = ID_XACT.INST_NUM
    and
    ope.PF_COD = ID_XACT.PF_COD
    and
    ope.INST_PRICE = ID_XACT.INST_PRICE
    and
    ope.INST_QTY = ID_XACT.INST_QTY
    and
    ope.XACT_TYP = ID_XACT.XACT_TYP
    and 
    ope.XACT_DAT = ID_XACT.XACT_DAT
    Ca passe pas non plus :S

    Je suis sous sybase
    version :Adaptive Server Enterprise/12.0.0.8/P/EBF 11874 ESD2/Sun_svr4/OS 5.7/2058/64bit/FBO/Thu May 20 09:12:03 2004

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Et comme ça ?
    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
     
    delete from tempdb..CalyonOpeTitre as ope
    where exists (select 1
    from ID_XACT
    where
    ope.INST_NUM = ID_XACT.INST_NUM
    and
    ope.PF_COD = ID_XACT.PF_COD
    and
    ope.INST_PRICE = ID_XACT.INST_PRICE
    and
    ope.INST_QTY = ID_XACT.INST_QTY
    and
    ope.XACT_TYP = ID_XACT.XACT_TYP
    and 
    ope.XACT_DAT = ID_XACT.XACT_DAT
    )
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    ok, ça a l'air de fonctionner... je convertie mon char en date et ce doit etre bon....
    Tu peux me donner quelques explication. pourquoi "select 1"

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par agougeon
    Pourquoi "select 1"
    Et pourquoi pas ?
    J'aurais pu faire Select Null ou n'importe quoi d'autre. Ce qui importe, c'est la jointure dans la clause where qui effectue un filtre sur la table principale.
    Le contenu de la liste retournée par la sous-requête EXISTS n'a aucune importance en tant que tel. En retournant une constante, je limite simplement l'accès à la table ID_XACT pour la jointure, qui idéalement s'effectuera sur un index, sans accès au contenu de la table.
    Après, c'est une question d'efficacité de l'optimiseur du SGBD.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre habitué Avatar de agougeon
    Inscrit en
    Mai 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 253
    Points : 147
    Points
    147
    Par défaut
    ok, merci pour ta réponse, mais la sous requete :

    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
     
    select 1
    from ID_XACT,
         tempdb..CalyonOpeTitre as ope
    where
    ope.INST_NUM = ID_XACT.INST_NUM
    and
    ope.PF_COD = ID_XACT.PF_COD
    and
    ope.INST_PRICE = ID_XACT.INST_PRICE
    and
    ope.INST_QTY = ID_XACT.INST_QTY
    and
    ope.XACT_TYP = ID_XACT.XACT_TYP
    and 
    ope.XACT_DAT = substring(convert(char(10),ID_XACT.XACT_DAT,103),1,2)+"-"+substring(convert(char(10),ID_XACT.XACT_DAT,103),4,2)+"-"+substring(convert(char(10),ID_XACT.XACT_DAT,103),9,2)
    retourne que des 1... et je vois pas comment fait le SGBD pour supprimer les bonnes ligne du coup...

    En tout cas, merci ça marche

    Désolé pour les questions, mais ça m'intérésse de comprendre.

    Merci

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par agougeon
    la sous requete (...) retourne que des 1... et je vois pas comment fait le SGBD pour supprimer les bonnes ligne du coup...
    C'est l'opérateur EXISTS associé à la jointure qui effectue la sélection
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/06/2009, 13h05
  2. Probleme avec ma requete DELETE
    Par Subkill dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/05/2007, 19h14
  3. probleme requete DELETE dans Postgres
    Par youp_db dans le forum JDBC
    Réponses: 2
    Dernier message: 13/11/2006, 17h35
  4. [Access 2003]Probleme type de donnée sur requete DELETE
    Par pottiez dans le forum Langage SQL
    Réponses: 12
    Dernier message: 09/08/2006, 09h39
  5. probleme requete DELETE
    Par Ice-tea dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/06/2006, 13h47

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