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 :

SELECT - SET - FROM


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut SELECT - SET - FROM
    Bonjour,

    Supposons la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    update table1 
    set 
    beginDate = #t.beginDate, 
    endDate = #t.endDate, 
    from table1 cv, #t 
    where cv.id = #t.id
    Donc je vais aller mettre à jour une table à partir d'une autre...

    Maintenant si je souhaitais remplacer le "FROM TABLE..." par un tableau de données, et donc faire sauter la deuxième table, mais inscrire les données en durs dans la requête... est-ce possible ? J'insiste sur tableau dans la mesure où je souhaite recopier des valeurs différentes pour chacune de mes rows...

    Est ce que je suis clair ?

    Merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Et où, dans le langage SQL, trouves-tu la définition et l'usage de tableaux ?

  3. #3
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Je ne cherche pas à utiliser de tableau explicitement, mais à simuler 2 rows de valeur en dur...

    Je veux faire l'update de 2 lignes avec des valeurs différentes...
    Je pourrais le faire en deux requêtes facilement, mais je voudrais le faire en une seule, et je m'interroge sur la faisabilité de cela...

    Merci.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Tu peux simuler des lignes de valeurs en dur.. ça s'appelle une table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (   SELECT 'A' AS col1
            ,   1 AS col2
    UNION
        SELECT 'B' 
            ,   2
    )
    Cette sous-requête te donnera une table de deux lignes et deux colonnes avec des valeurs en dur, comme tu le souhaites.

  5. #5
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci de ta réponse...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    update APV 
    set (beginDate, endDate) 
    from 
    (   
    	SELECT 'A' AS beginDate,   '1' AS endDate from TCC_APV UNION
        SELECT 'B'        ,        '2'            from TCC_APV 
    )
    Mais il a l'air d'avoir du mal avec la double parenthèse suivant le FROM...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg 170, Level 15, State 1, Line 11
    Line 11: Incorrect syntax near ')'.
    Où me suis-je tromper ?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 493
    Points
    28 493
    Par défaut
    1. Une sous-requête utilisée dans une clause FROM est une table dérivée et doit être munie d'un alias.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SELECT ... FROM (SELECT ...) AS nom_alias
    2. Il n'y avait intentionnellement pas de clause FROM dans l'exemple que je t'ai donné puisqu'il s'agit de données brutes.
      Si toutefois ton SGBD réclame une clause FROM, il faut utiliser une table quelconque comportant une seule ligne (telle que DUAL en Oracle)

  7. #7
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    update table1 
    set beginDate=tmp.beginDate, endDate=tmp.endDate
    (   
    	(SELECT * FROM  
    	(SELECT '15017' AS Id, '2007-12-03 08:09:40' AS beginDate,   '2007-13-03 08:09:40' AS endDate UNION
         SELECT '15019'     ,  '2007-14-03 08:09:40'             ,   '2007-15-03 08:09:40')  AS TMP) 
    ) 
    WHERE table1.id=tmp.id
    J'y suis presque, mais il me dit que 'tmp' n'est pas un préfixe connu...

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 493
    Points
    28 493
    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
    UPDATE  table1
    SET     beginDate = tmp.beginDate
        ,   endDate = tmp.endDate
    FROM  
        (   SELECT  '15017' AS Id
                ,   '2007-12-03 08:09:40' AS beginDate
                ,   '2007-13-03 08:09:40' AS endDate 
        UNION
            SELECT  '15019'     
                ,   '2007-14-03 08:09:40'
                ,   '2007-15-03 08:09:40'
        )   AS tmp
    WHERE   table1.id = tmp.id
    A la condition que ton SGBD accepte bien la syntaxe (hors norme) UPDATE...FROM

  9. #9
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Parfait !

    Grand merci.

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

Discussions similaires

  1. [MySQL-5.5] SELECT x FROM y WHERE z WITHIN data set
    Par PhilLU dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/06/2014, 08h54
  2. WHERE champ in (select champ from...)
    Par Garra dans le forum Installation
    Réponses: 16
    Dernier message: 12/10/2008, 17h55
  3. DELETE FROM t where t.id IN (SELECT id FROM t....)
    Par davcha dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2006, 16h19
  4. Select dans from
    Par SegmentationFault dans le forum SQL
    Réponses: 3
    Dernier message: 30/07/2004, 18h13
  5. equivalent de select nextval from dual en SQL-Server ?
    Par toze dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/10/2003, 10h17

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