Insertion multiple à base de sous requête SELECT
Bonjour,
J'essaye d'insérer plusieurs lignes dans une table.
voici ma requête:
Code:
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 ?
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:
SELECT Mon_champ+1 AS Mon_champ FROM Ma_table;
Ou alors, je n'ai pas compris ce que tu souhaites...
Re: Insertion multiple à base de sous requête SELECT
Citation:
Envoyé par drinkmilk
Code:
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 ?
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:
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) :?: