Probleme SQL parait il faisable... - SQL/NoSQL - Programmation
Marsh Posté le 20-01-2006 à 20:36:23
Un truc comme ça ?
Code :
|
Marsh Posté le 20-01-2006 à 20:47:41
Essaye quelque chose dans le genre de :
Code :
|
sub : contient les couples (num_avenant, num_lot maximum pour ce num_avenant)
numbers_list : contient les entiers de 1 au num_lot maxi de la table S1.
En faisant la jointure et en mettant cette condition dans la clause WHERE, on devrait pouvoir sortir tout ce que tu veux ...
Marsh Posté le 20-01-2006 à 20:49:30
Arjuna a écrit : Un truc comme ça ?
|
Je ne pense pas, je vois pas comment ça pourrait sortir des num_lot qui n'existent pas dans la table (appelée S1 d'ailleurs).
Marsh Posté le 20-01-2006 à 20:57:22
En regardant bien son truc "num_lot" est séquentiel, donc à priori, y'a toutes les possibilités dedans. Mais la question n'est pas assez explicite.
Sinon, faut remplir une table "num" avec un champ unique, contenant toutes les valeurs de 1 à n avec n >= select max(num_lot) from latable
Marsh Posté le 20-01-2006 à 21:00:46
euh...
là il n'y a pas insertion des données qui sont en gras dans mon 1er post, ni même la sélection de ces données en gras...
ou alors je suis encore moins bon en sql que je ne le pensais...
insert into s1 (num_avenant, num_lot)
select
A.num_avenant, A.num_lot
from S1 A
where not exists(select 'X' from S1 B where B.num_avenant + 1 = A.num_avenant and B.num_lot = A.num_lot
and B.num_avenant < max(B.num_avenant))
Mais ça marche pô...
en gros, je voulais dire que si le couple (num_avenant + 1/num_lot) soit par exemple la 1ere ligne 1 (0 + 1)/1
n'existe pas déjà dans la table, je la crée. Pareil pour la 2ème ligne : le couple 0 + 1 = 1/2 n'existe pas ?
je crée la ligne. Et ainsi de suite : le couple 1 + 1 = 2/6 n'existe pas ? je le crée !
Et attention, la ligne que j'ai créée (1/2), il faut encore faire le test dessus et comme 1 + 1 =2/2
n'existe pas non plus, je crée cette ligne aussi
Je ne sais pas si je suis compréhensible
Merci déjà de prendre le temps de me répondre
edit : oups, je repondais à arjuna, g pas lu la suite
Marsh Posté le 20-01-2006 à 21:09:25
Où j'ai utilisé un "not exists" moi ?
Recopie déjà la requête et teste-là avant de dire que ça marche pas.
Ensuite, oui, ça ne fait qu'un SELECT, on va pas te faire l'INSERT en plus (surtout que tu l'as pas demandé...)
Marsh Posté le 20-01-2006 à 21:10:27
Je t'ai donné le SELECT qui te montre le résultat final de la table.
Si tu veux l'INSERT pour combler les trous, c'est simple :
Code :
|
A tester, parce que je me demande si utiliser la même table à la fois dans le SELECT et le INSERT est faisable sans souci
Marsh Posté le 20-01-2006 à 21:15:07
Arjuna a écrit : Où j'ai utilisé un "not exists" moi ? |
nan, nan, c'est ma requete à moi qui ne marche pas
ne t'énerve pas, je me suis mal exprimé.
La base est éteinte (j'étais au boulot) donc je ne pourrai la tester que lundi matin. Ce probleme me trottait méchamment dans la tete, c'est tout encore 1 heure apres
Merci à toi et à Beegee de vous être donnés la peine de me répondre
Je dirai ce qu'il en est lundi matin.
D'ici là bon we à vous
Marsh Posté le 20-01-2006 à 19:54:15
Bonsoir,
J'ai un souci SQL et je ne sais pas s'il est résolvable via seulement SQL (je suis sur Oracle 9)
J'ai une table S1 dont la clé est la combinaison de num_lot et de num_avenant.
J'ai 7 enregistrements :
num_avenant num_lot
0 1
0 2
0 3
0 4
1 5
1 6
2 7
Et je veux une instruction SQL (une seule, pas de pl/sql autorisé)
qui me créée des lignes de façon à ce que j'ai à la fin
0 1
0 2
0 3
0 4
1 1
1 2
1 3
1 4
1 5
1 6
2 1
2 2
2 3
2 4
2 5
2 6
2 7
Donc je pensais en gros dire que si le couple num_avenant + 1/num_lot n'existe pas
déjà dans la table, il faut le créer, maisle num_avenant + 1 ne peut pas dépasser le max (ici 2)
Mais je ne sais pas comment l'écrire en SQL. Et en plus il faudrait appliquer cette règle AUSSI sur les lignes que je viens de créer !
C'est faisable ?
désolé si ma qst est super simple, mais j'y arrive vraiment pas...
Merci d'avance