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 :

Insertion multiple à base de sous requête SELECT


Sujet :

Langage SQL

  1. #1
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut Insertion multiple à base de sous requête SELECT
    Bonjour,

    J'essaye d'insérer plusieurs lignes dans une table.

    voici ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Ma_table (Mon_champ)
    SELECT ((SELECT MAX(Mon_champ) AS Mon_champ FROM Ma_table) + 1) AS Mon_champ
    FROM         Ma_table
    WHERE     (o_name LIKE 'XXX%')
    Le problème, c'est que Mon_champ doit être unique, et cette requête ne me donne que des valeurs identiques (valeur max + 1). Comment faire pour avoir une sorte d'incrémentation de la valeur insérée ?

  2. #2
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut Re: Insertion multiple à base de sous requête SELECT
    Citation Envoyé par drinkmilk
    Comment faire pour avoir une sorte d'incrémentation de la valeur insérée ?
    Pourquoi pas tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Mon_champ+1 AS Mon_champ FROM Ma_table;
    Ou alors, je n'ai pas compris ce que tu souhaites...

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Insertion multiple à base de sous requête SELECT
    Citation Envoyé par drinkmilk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ((SELECT MAX(Mon_champ) AS Mon_champ FROM Ma_table) + 1) AS Mon_champ
    FROM         Ma_table
    WHERE     (o_name LIKE 'XXX%')
    Teste ta requête "en dehors" du INSERT : elle peut te ramener plusieurs lignes (selon ta condition) avec le même valeur pour "MonChamp", donc effectivement, tu tenteras d'insérer des doublons en utilisant ton SELECT dans un INSERT!

    Je vois à peu près ce que tu souahites faire, mais le réaliser dans un seule commande INSERT ne me paraît pas possible. Avec Oracle, j'écrirais une petite procédure PL. Avec quel SGBD travailles-tu ?

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut Re: Insertion multiple à base de sous requête SELECT
    Citation Envoyé par Cerberes
    Citation Envoyé par drinkmilk
    Comment faire pour avoir une sorte d'incrémentation de la valeur insérée ?
    Pourquoi pas tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Mon_champ+1 AS Mon_champ FROM Ma_table;
    Pourquoi ne carrément pas utiliser un auto-increment ou un identity (selon le SGBD qu'il utilise) :

  5. #5
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Merci pour vos réponses.

    La requête que je vous ai montrée est simplifiée, ce qui rend peut être un peu obscur son utilité. Il s'agit en fait de copier quelques lignes d'une table, mais en affectant un nouveau numéro au champ "Mon_champ".

    Comme MAX(Mon_champ) est constant pendant l'insertion, dès qu'il y a plusieurs lignes à copier, ça pose problème car Mon_champ devrait être unique (eg: il essaye de copier plusieurs lignes avec Mon_champ = 8).

    J'utilise SQL Server 8. Je n'ai encore jamais écrit de procédure, mais il va peut être falloir que je commence alors ?

    J'oubliais, je ne peux pas redéfinir les propriétés de la table... Donc pas d'auto-incrément...

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Sous ORACLE, j'essaierais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (SELECT MAX(Mon_champ) FROM Ma_table) + ROWNUM AS Mon_champ 
    FROM         Ma_table 
    WHERE     (o_name LIKE 'XXX%')
    ROWNUM est le N° de la ligne retourné par le SELECT, je ne sais pas si tu as l'équivalent sous SQL Server...

  7. #7
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    C'est exactement ce qu'il me faudrait.

    Après une petite recherche sur le web, il semble qu'il n'y ait pas d'équivalent à ROWNUM chez SQL SERVER. Je vais quand même poser la question sur le forum de cette base.

  8. #8
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Pour info, j'ai résolu mon problème en décomposant la requête. Qui c'est déjà ce penseur qui affirme que chaque problème doit être décomposé en sous-problème plus simple pour être résolu ? Merci à lui aussi alors.

  9. #9
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par drinkmilk
    Merci à lui aussi alors.
    Je transmets à Descartes immédiatement

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

Discussions similaires

  1. [AC-2007] Sous-requête "Select" dans une requête "update"
    Par MatAllwhite dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/06/2013, 15h00
  2. INSERT des valeurs multiples isues d'un sous-requête
    Par nouri_t dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/11/2011, 14h41
  3. Insert multiples avec sous-requête SELECT
    Par lolymeupy dans le forum Requêtes
    Réponses: 6
    Dernier message: 08/08/2011, 18h57
  4. Insertion multiple + sous-requête
    Par Cyprien_ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/10/2007, 18h14
  5. Insertion à base de sous requête select
    Par imane_bennouna dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2006, 13h03

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