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 :

[HSQL] Inverser des booleans sur plusieurs lignes


Sujet :

Langage SQL

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut [HSQL] Inverser des booleans sur plusieurs lignes
    Bonjour, voila j'ai une base de donnée HSQL.
    Dans certaine table, j'ai un champ boolean. Ce champ est là pour dire si la les infos correspondant à la ligne pourront être utiliser par l'utilisateur ou non.
    J'aimerais pouvoir inverser ce champ (donc passer les trues à false et les false à true) sur plusieurs ligne, en une seul requete.
    Mais, je ne vois vraiment pas comment faire, quelqu'un aurait il une idée ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ajouter une colonne temporaire, stocker uniquement les TRUE dans cette colonne.
    Puis, modifier les TRUE de votre colonne originale en FALSE.
    Ensuite, pour chaque ligne où votre colonne temporaire vaut TRUE, mettre FALSE dans la colonne originale.
    Enfin, détruire la colonne temporaire.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Mhh ok je vois l'idée merci bien.
    Par contre, quand vous dites "ajouter un colonne temporaire", je fais ca avec ALTER TABLE ADD colone_temp puis un deuximème ALTER, ou il y aun moyen plus "propre" ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Oui c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE MyTABLE ADD COLUMN MyCOL ... ;
    ALTER TABLE MyTABLE DROP COLUMN MyCOL
    mais ce n'est pas sale (comme dirait le doc )
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Oui, pour ca que je mettais le propre entre guillemet, je me demandais s'il n'existait pas un vrai type de colonne temporaire.
    En tout cas c'est bon, ca marche merci bien ^^

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Je remonte vite fait, car j'ai un petit souci.
    Ca marche pour plusieurs table sans problème, mais il y'en a une qui peut comporter plusieurs disaines de milliers de lignes. Et, au moment de faire ALTER TABLE sur cette table, cela prend plusieurs secondes (*2 puisqu'il ya deux ALTER).
    Je me dis que je pourrais peut être au lieu d'inverser en créant une colone (et donc en modifiant la structure de la table) le faire en créant une table.
    Mais, comment puis je copier toutes les lignes qui m'interesse de ma première ma table vers ma deuxième ?

  7. #7
    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
    As-tu essayé de faire l'UPDATE avec un CASE ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE  matable
        SET colonne = ( CASE colonne 
                            WHEN TRUE   THEN FALSE
                            WHEN FALSE  THEN TRUE
                            ELSE colonne
                        END )
    ;
    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.

  8. #8
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    <---- inculte en SQL.
    Je ne conaissais pas le CASE *honteux*. Mais en effet ca marche très bien, merci beaucoup ^^

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    et le "not" ca ne marchait pas ?

    UPDATE MA_TABLE SET MY_BOOL = NOT MY_BOOL

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

Discussions similaires

  1. Tracer des courbes sur plusieurs lignes
    Par ikuzar dans le forum R
    Réponses: 3
    Dernier message: 09/02/2012, 01h05
  2. Insérer des données sur plusieurs lignes dans une seule en SQL
    Par nathantahiti dans le forum Développement
    Réponses: 1
    Dernier message: 03/08/2011, 10h47
  3. Réponses: 5
    Dernier message: 02/09/2010, 16h15
  4. Fusionner des cellules sur plusieurs lignes
    Par pekka77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/07/2008, 18h05
  5. Réponses: 2
    Dernier message: 18/11/2005, 21h40

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