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

Installation MySQL Discussion :

WHERE champ in (select champ from...)


Sujet :

Installation MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut WHERE champ in (select champ from...)
    Bonjour

    Je rêve ou sur mysql on ne peut pas faire comme sur Oracle par exemple
    une requete du genre

    update table set titi = 'toto' where id in (select id from table where....)



    merci!!!

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    MySql sait gérer les requetes imbriquées a partir de la version 4.1 je crois.
    Peut etre as tu une version plus ancienne ?

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Tu peux le faire à partir de la version 4.1 seulement.

    Sinon, tu peux certainement faire la même chose sans requête imbriquée, éventuellement avec une jointure.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Effectivement, j'ai la version 4.0

    Si j'installe la version 5.0, j'écrase ma base?

    J'ai easyphp.

    Que dois-je installer et comment pour ne pas avoir à tout refaire?

    Merci


  5. #5
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par Garra
    Si j'installe la version 5.0, j'écrase ma base?
    non. il suffit de faire une sauvegarbe du répertoire data et de la transférerdans la nouvelle version de MySQL.

    sinon, tout n'est pas à refaire, mais j'ai oublié la marche à suivre exacte.
    Pensez au tag

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Tu peux sans doute faire la même chose sans requêtes imbriquées, c'est quoi la requête que tu essayes de faire?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Ca y est! c'est fait et ça marche
    J'ai installé la version suivante de easyphp avec tout le tralala
    et la version 4.1 de mysql

    Mais pour info:
    il me semble impossible de faire un update du genre (c'est un exemple):

    udpate table1 set titi = toto where id in (select id from table2 where type = 'xxx')

    avec une jointure....., le update ne le permet pas
    (c'est bizarre que mysql ait mis autant de temps à s'adapter à une
    base comme oracle par exemple (celle que je préfère))

    Merci à tous et chau chau chau


  8. #8
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Garra
    Mais pour info:
    il me semble impossible de faire un update du genre (c'est un exemple):

    udpate table1 set titi = toto where id in (select id from table2 where type = 'xxx')

    avec une jointure....., le update ne le permet pas
    Ah oui? Et ça alors?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE table1 
    INNER JOIN table2
    ON (table1.id = table2.id)
     
    SET table1.titi = toto
    WHERE table2.type = 'xxx'
    Voir également:
    http://www.developpez.net/forums/viewtopic.php?t=423925
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut


    ah d'acc, ça n'existait pas "à mon époque"


  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Salut,

    En suivant tes conseils j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE particule INNER JOIN particulegroupe ON ( particule.idNum = particulegroupe.idNum ) SET particule.dateAffichage = NOW( ) WHERE particule.idNum IN ( 2, 33, 32, 37, 11, 27, 29, 28, 14, 26, 45, 41, 48, 27, 40, 17, 45, 36, 26, 4, 1, 18, 30, 20, 31, 6, 38, 40, 2, 41, 27, 5, 25, 11, 43, 37, 38, 24, 16, 4, 2, 12, 45, 1, 40, 36, 18, 36, 24 ) AND particulegroupe.codeGroupe = 'FOND'
    mais ça ne marche pas
    Merci de m'aider!!

  11. #11
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Quel message d'erreur ?
    Pensez au bouton

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Bonjour et merci

    Dès que j'enlève la condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND particulegroupe.codeGroupe = 'FOND'
    ça marche mais il me faut cette condition!!

    Merci

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    En fait ça marche sur ma base local 4.1 mais le problème c'est que mon super hebergeur ne me mets à dispo que la version précédente de
    mysql et là, ça ne marche pas!

    MySQL a répondu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    #1064 - You have an error in your SQL syntax near 'INNER  JOIN particulegroupe ON ( particule.idNum = particulegroupe.idNum )  SET ' at line 1
    C'est tout ce que j'ai comme erreur
    Merci

  14. #14
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    C'est quelle version exactement ? On dirait qu'il ne supporte pas les UPDATE multi-tables...
    Pensez au bouton

  15. #15
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    J'ai peut-être une solution alternative:

    1) tu créés une table temporaire
    2) dans cette table temporaire, tu insères tous les enregistrements qui seront affectés par le changement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO table_temporaire
    SELECT table1.*
    FROM table1
    INNER JOIN table2 ON ...
    WHERE ...
    3) tu fais ton UPDATE sur les enregistrements de ta table temporaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table_temporaire
    SET truc='bidulle'
    4) tu "commit" les changements dans la table de départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REPLACE INTO table1
    SELECT *
    FROM table_temporaire
    5) tu nettoyes ta table temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRUNCATE TABLE table_temporaire
    Du coup, plus de problème de version ou de syntaxe !
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    Oui, j'avais pensé à faire quelque chose comme
    cela mais c'est du bricolage insupportable.
    J'ai fait oracle pendant 15 ans, et je inner join
    n'était pas en tout cas à mon époque, utilisé.

    T'en fais pas, je trouverais une solution plutôt côté mémoire (array)
    car peu de données

    Merci!!!

  17. #17
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut A l'attention de pcaboche
    Salut

    Je te remercie grace a ce topic j'ai trouvé la bonne syntaxe qui marche en effet


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE table1 
    INNER JOIN table2
    ON (table1.id = table2.id)
    SET table1.titi = toto
    WHERE table2.type = 'xxx'
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/05/2013, 08h44
  2. Réponses: 2
    Dernier message: 27/01/2011, 16h42
  3. Réponses: 15
    Dernier message: 27/01/2011, 11h00
  4. SELECT (champ issue d'un autre SELECT) FROM
    Par Fredovsky dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2010, 00h47
  5. Réponses: 2
    Dernier message: 21/08/2008, 12h46

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