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 :

La requête du jour (siècle)


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut La requête du jour (siècle)
    Bonjour à tous,

    Je risque de passer pour une jambe de bois, mais là, j'ai fait la découverte du siècle

    Tout ça pour dire que j'en ai appris une bonne...

    Mon problème était que je devais supprimer des références employé dans de multiples tables. Malheureusement pour moi, en fait, heureusement, le delete cascade ne fonctionnait pas. En plus, le modèle de données est tellement complexe, ou pourri, c'est selon, qu'il m'était impossible de faire un alter table (...) on delete cascade. Il a donc fallu se la faire à l'ancienne et supprimer tous les enfants avant du supprimer les parents

    Voilà la perle que j'ai trouvé, en fouillant sur le net, bien évidemment.
    Le problème énoncé (simplifié) : Je cherche à supprimer tous les enfants des parents qui ne sont plus employé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DELETE FROM Enfant
    FROM Enfant e inner join Employe em on e.idEmp = eAussi.id
    WHERE eAussi.isEmploye = 0
    BIM !!!

    Ça faisait longtemps que j'avais pas été excité comme un jouvenceau

  2. #2
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    reBIM!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE e
    FROM Enfant e INNER JOIN Employe em ON e.idEmp = eAussi.id
    WHERE eAussi.isEmploye = 0

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Et sinon, vous avez une question ?

  4. #4
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Et sinon, vous avez une question ?
    Pour l'instant pas. Mais comme il m'a été difficile de trouver cette information je la partage, je me dis qu'elle pourrait être utile à quelqu'un d'autre. Mais sans doute as-tu raison, j'aurai dû le mettre dans la FAQ

  5. #5
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Citation Envoyé par LhIaScZkTer Voir le message
    reBIM!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE e
    FROM Enfant e INNER JOIN Employe em ON e.idEmp = eAussi.id
    WHERE eAussi.isEmploye = 0
    Cette syntaxe ne se trouve pas dans les écrits d'SQLPro puisqu'ils concernent la syntaxe de la norme SQL, hors cette requête est une pure création de chez MySQL il me semble.

    Elle permet de contourner l'impossibilité de réaliser certaines sous-requêtes dans les opérations DML.

    Doc MySQL :
    Currently, you cannot delete from a table and select from the same table in a subquery.
    Voir par exemple:
    Update avec sous requête MySQL

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Citation Envoyé par LhIaScZkTer Voir le message
    Bonjour à tous,

    Je risque de passer pour une jambe de bois, mais là, j'ai fait la découverte du siècle
    Pour être tout à fait honnête avec toi, la jointure est une découverte du siècle précédent...


  7. #7
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    ALERTE au TROLL !!!!!
    Citation Envoyé par SQLpro Voir le message
    Il est assez navrant de constater que cette requête simplissime soit supposé être le miracle du jour !
    Preuve que les développeurs régressent à un point que je n'aurais jamais imaginé il y a dix ans....

    Bref, messieurs, commencer par apprendre le langage SQL avec un vrai cours, en vous aidant d'une BON site web et d'un BON bouquin et non en lisant tout un tas de blog ou de livres à la con, comme SQL Tête la première !

    On est en pleine régression...

    A +
    Je suis désolé mais je ne peux pas laisser passer un tel message. Il est clairement honteux de la part d'un enseignant du CNAM. Je suis auditeur au CNAM...

    Ton message je le prends comme une attaque partiellement personnel. On va déjà remettre le contexte en place. Voilà les technologies que je pratique dans le cadre de mon travail html, css, javascript(avec du ajax), xml (schema et DTD), php, java, c#, vb.net , asp.net, SQL et dernièrement dev mobile. Malheureusement pour moi je fais de la maintenance logiciel (que de la correction de bugs... et mise aux normes w3c pour le web) donc j'ai pas de gros projet où je peux me perfectionner. Maintenir à jour toutes ces connaissances demande trop temps, temps que je n'ai pas puisque en plus j'étudie en cours du soir... En gros, je fais tout mais ne maitrise rien... la faute à qui ? A moi ? Je ne t'ai pas dit, mais j'ai un peu moins de 2 ans d'expérience et durant ces 2 ans je n'ai eu aucun teaching (je suis le seul développeur dans la boite ainsi que dans mon expérience passée) et personne pour m'inculquer les bonnes pratiques, d'ailleurs c'était plutôt le contraire, on me désapprenait. La faute à qui ? A moi, toujours ? Tu es informaticien et tu connais la réalité du marché. Quand tu trouves un boulot en tant que junior tu dois être le king de la planète et tout connaitre et être à 100% opérationnel... Le partage des connaissances se perd dans notre milieu. La question que je te pose est la suivante : Est-ce qu'il y a 10 ans un développeur devait pratiquer autant de technos en même temps ?

    Pour ta deuxième allégation. Je suis auditeur au CNAM et détenteur d'un CP TDAI, je suis à une UE du CP Webmestre et à 20 crédits de la licence. Je suis certifier Java et j'aimerais me certifier .NET et PHP et Oracle. Tout ça pour monter en compétence. Les profs que j'ai eu en base de données, il y a eu Daniel Beauchêne qui enseigne aussi à l'IUP d'annecy, excellent prof. Puis Christophe Marty vraiment excellent prof et un support de cours impeccable et enfin Joëlle DELACROIX-GOUIN excellent prof aussi, mais le cours ne parlait pas que des BD, puisque ce n'était pas le sujet principal du cours.

    Le problème de ces cours, c'est qu'ils sont très porté sur la modélisation de BD et les requêtes de type DML mais en SELECT. Il y a beaucoup d'exercices de ce type (select) et beaucoup moins pour tout ce qui touche au DDL et update et delete. D'ailleurs à mon boulot je fais plus de requête de type SELECT que de DELETE ou UPDATE qui elles sont définies au début et ensuite on y touche que très rarement. Ce qui explique que je sois moins à mon aise avec ce type de requête. Tu peux te targuer d'être un spécialiste en base de données mais je suis sûr que le 70% de ton temps, au minimum, tu ne fais que ça, avec en plus une dizaine d'années d'expérience. Donc tu n'as aucun mérite. As-tu oublié que toi aussi tu es passé par-là ? Il faut apprendre à modérer ton égo ! Je serai très heureux que tu m'envoies ton cours pour que je puisse lire son contenu et te saquer s'il manque quelque chose...

    A propos des bons sites web et bouquins dont tu parles. J'ai en permanence un onglet d'ouvert sur sql et le 99% de mon temps je trouve ce que je recherche, c'est souvent pour me rafraichir la mémoire sur tel ou tel point. Mais j'en conclu que c'est un site à la con puisque l'information que je cherchais n'y était pas ?... Delete avec sous requête, merci de rajouter un exemple 17.2 avec le bout de code que j'ai mis car tu n'en traites pas. Et merci aussi de me remercier pour t'avoir montré une lacune dans tes exemples. Ton exemple supprime le/les tuple/s satisfaisant à la sous-requête qui ne renvoie qu'un résultat, alors que moi je cherchais à supprimer le/les tuple/s satisfaisant à la sous-requête qui renvoie plusieurs résultats. D'ailleurs avant j'avais testé ta requête et j'avais eu le message suivant :
    Server: Msg 512, Level 16, State 1, Line 1
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    The statement has been terminated.
    C'est vrai, j'aurais pu utiliser la sous requête avec un IN dans mon cas pour parlier à cette erreur. Cependant, laquelle des deux offre un meilleur temps de traitement ? Tiens, voilà où tu pourrais te rendre utile, répondre à cette question, car si ça se trouve tu n'en parles pas non plus dans ton billet sur l'optimisation avec ce type de requête ? Oui... je l'ai lu aussi, il est très intéressant, mais des fois certains exemples manquent de clarté et si mes souvenirs sont bons il n'y a que du DML.
    Les uniques livres que je possède traitant des bases de données :
    Conception et architecture des bases de données,
    Bases de données écrit par Gardarin,
    et et et... SQL 1er édition par Frédéric Brouard
    Est-ce aussi des livres à la con ? Alors oui, c'est vrai, je ne les ai pas lu en entier, je m'en sers comme référence lorsque je recherche un élément en particulier. Et malheureusement, encore une fois, comme je ne fais pas du SQL toute la journée, j'ai tendance à oublier. C'est très volontiers que j'accepte une place dans ta société si tu me coatch.

    Il est claire que pour les mammouths des bases de données dans ton genre cette syntaxe t'est familière, mais moi, je ne l'avais jamais vue et c'est pour ça que je l'ai posté, pour un partage de connaissance, sûrement pas à la hauteur du tien, mais un partage tout de même... Peut-être même que dans ton livre elle n'y est pas, je vais vérifier. Tu peux être sûr que t'auras droit à un commentaire à la hauteur du tien, sois-en sûr !

    Ça serait pas mal de t'excuser aussi, d'éviter une poussée fulgurante d'égo de pré-grincheux-blasé-pédant et de m'envoyer un pdf de ton dernier livre car j'ai plus trop envie de l'acheter maintenant
    J'espère que tu ne traites pas comme ça tes élèves, parce que de pas savoir ou de plus savoir c'est pas un crime, surtout quand on cherche à apprendre

    A+

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Citation Envoyé par LhIaScZkTer Voir le message
    ALERTE au TROLL !!!!!

    Je suis désolé mais je ne peux pas laisser passer un tel message. Il est clairement honteux de la part d'un enseignant du CNAM. Je suis auditeur au CNAM...
    Pas la peine de monter sur tes grands chevaux comme ça. Les vieux schnocks comme SQLpro ou moi aimons bien dire que les jeunes sont mal éduqués et ne connaissent rien, ça n'a rien de très nouveau...

    Sur le fond, SQLpro a raison de dire que ça n'est pas la découverte du siècle ; plus largement, ça me semble normal qu'un enseignant encourage les étudiants à ne pas se satisfaire de trucs de base et à creuser plus loin.

    Enfin, la syntaxe que tu as citée est propre à MySQL, d'où le fait que tu ne l'ai pas trouvé sur le site ou dans les bouquins de SQLpro, qui traitent du SQL standard.

    J'espère que tu ne traites pas comme ça tes élèves, parce que de pas savoir ou de plus savoir c'est pas un crime, surtout quand on cherche à apprendre
    A+
    je suis sûr qu'il est pire !

    Stimuler les étudiants n'est pas un crime non plus

  9. #9
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Pas la peine de monter sur tes grands chevaux comme ça. Les vieux schnocks comme SQLpro ou moi aimons bien dire que les jeunes sont mal éduqués et ne connaissent rien, ça n'a rien de très nouveau...

    (...)

    Enfin, la syntaxe que tu as citée est propre à MySQL, d'où le fait que tu ne l'ai pas trouvé sur le site ou dans les bouquins de SQLpro, qui traitent du SQL standard.
    Je ne monte pas sur mes grands chevaux, j'expose les faits. Et le fait est qu'il a eu une remarque très réductrice et mal placée, et ça au lieu d'avoir une intervention constructive et dire que ce n'était pas dans le standard. Comme tu aimes à le dire, les vieux schnocks dans votre genre, que vous disiez que les jeunes sont mal éduqués c'est votre problème, mais au moins apportez votre lumière...

    Attends, je vais me pousser de 22 ans pour être ton aîné... Mon petit, cette requête a été pondue sur SQL Server. Merci de revoir tes non-standards... Ha ces jeunes d'aujourd'hui ils sont mal éduqués

  10. #10
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Merci pour tes liens Oishiiii, je vais regarder de plus près.

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Citation Envoyé par LhIaScZkTer Voir le message
    Je ne monte pas sur mes grands chevaux, j'expose les faits. Et le fait est qu'il a eu une remarque très réductrice et mal placée,
    qu'est-ce qu'il a donc dit de si terrible ?
    Citation Envoyé par LhIaScZkTer Voir le message
    et ça au lieu d'avoir une intervention constructive et dire que ce n'était pas dans le standard. Comme tu aimes à le dire, les vieux schnocks dans votre genre, que vous disiez que les jeunes sont mal éduqués c'est votre problème, mais au moins apportez votre lumière...
    Bah, si tu avais posé la question, on t'aurait répondu avec plaisir, mais là tu est juste venu tendre la verge pour te faire battre...
    Citation Envoyé par LhIaScZkTer Voir le message
    Attends, je vais me pousser de 22 ans pour être ton aîné... Mon petit, cette requête a été pondue sur SQL Server. Merci de revoir tes non-standards... Ha ces jeunes d'aujourd'hui ils sont mal éduqués
    Je n'aurais pas cru que SQL Server accepte ça, mais bon, ça ne veut pas non plus dire que c'est du SQL normalisé. Mais là, je laisse SQLpro trancher, vu que c'est le seul à utiliser le SQL normalisé .

    Ceci dit, oui, c'est naturel de faire une jointure ou une sous-requête IN dans ces cas-là, ou du moins ça devrait l'être. Il n'y a aucune honte à ne pas connaître ça quand on est en train d'apprendre, mais venir claironner que tu as découvert l'eau tiède et que c'est la révolution n'est quand même pas très glorieux

Discussions similaires

  1. Erreur sur Requête Mise à Jour
    Par guenfood dans le forum Access
    Réponses: 1
    Dernier message: 06/06/2006, 08h51
  2. Requête Mise à jour à partir d'une autre table
    Par temar dans le forum Access
    Réponses: 2
    Dernier message: 17/05/2006, 09h23
  3. requête mise à jour
    Par yonnakb dans le forum Access
    Réponses: 6
    Dernier message: 07/03/2006, 14h03
  4. Requête mise à jour
    Par maximelm dans le forum Access
    Réponses: 28
    Dernier message: 03/03/2006, 17h35
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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