Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 14h49   #1
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Par défaut Sélectionner un identifiant non attribué

Bonjour,

je me demande s'il est possible d'exprimer la contrainte suivante en SQL : sélectionner une valeur non existante dans une colonne.

Un exemple valant mieux qu'un long discours :

|NUMBADGE|
|+++++++|
|________1|
|_______17|
|_______83|
|_____1525|

etc ... (NUMBADGE étant un number(10))
Il faudrait que la requête sélectionne le premier NUMBADGE disponible dans la liste (2 en l'occurence).

En gros un truc qui ressemble à ça en pseudo sql :

Code :
1
2
3
SELECT (number(10)) AS numero
FROM tblbadge
WHERE numero NOT IN (SELECT numbadge FROM tblbadge)
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 15h07   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
si je comprend bien il s'agit de selectionner les valeurs non-nuls

Code :
1
2
3
SELECT (number(10)) AS numero
FROM tblbadge
WHERE NUMBADGE IS NOT NULL

par contre je ne comprends pas :
Citation:
Il faudrait que la requête sélectionne le premier NUMBADGE disponible dans la liste (2 en l'occurence).
le resultat de la requete devrait etre "1" ?
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 15h35   #3
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Non, il s'agit de sélectionner les numéros qui n'existent pas.

Les numéros de badge ont été entrés à la main, donc ils ne se suivent pas.

Et maintenant quand je dois en attribuer un nouveau dans une plage donnée (genre entre 1000 et 2000) je tombe régulièrement sur des numéros déjà attribués.

Et étant programmeur, donc fainéant, je me disais qu'il y avait sans doute moyen d'automatiser ça

La base (Oracle) est à un de nos fournisseurs et on ne peut rien modifier dessus, et si j'avais pu me faire une petite requête que je copie / colle sous SQL+ plutôt que de devoir créer tout un programme pour ça, ben ça m'aurait arrangé.
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 15h45   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
il n'y a donc aucun moyen d'acceder a la structure de la bague ?
pour creer
  • une contrainte
  • une auto-incrementation
  • une table

correct ?
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h09   #5
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Exact : je n'ai le droit que de lire sur cette base.
Si j'y touche on perd la garantie ...

Bon c'est pas non plus un impératif vital : je peux soit continuer à le faire à la main, soit développer un petit prog qui le fasse, mais j'aurais aimé savoir si c'était techniquement possible juste avec du SQL.
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h17   #6
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Une requête comme celle-là ?
Code :
1
2
3
4
5
6
7
SELECT  MIN(numbadge) + 1
FROM    tblbadge    tbl
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    tblbadge    bdg
            WHERE   tbl.numbadge + 1 = bdg.numbadge
        )
__________________
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/05/2011, 16h23   #7
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Il faut que je teste, mais par contre je ne comprend pas le "SELECT 1" dans ta requête imbriquée. N'est ce pas supposé toujours retourner 1 ?
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h43   #8
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Ca marche, tu es mon héros

Voici la requête finale (les champs sont différents de mon exemple, j'avais simplifié) :

Code :
1
2
3
4
5
6
7
8
9
SELECT min(matricule) + 1 AS matricule
FROM t_utilisateurs tut
WHERE NOT EXISTS
(
	SELECT 1
	FROM t_utilisateurs uti
	WHERE tut.matricule + 1 = uti.matricule
)
AND matricule > 1000;
Par contre ce "select 1" me laisse perplexe !
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h52   #9
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Les valeurs retournées par la sous-requête que consulte EXISTS n'ont aucune utilité... Alors, retourner 1 ou autre chose
__________________
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h01   #10
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Ben là je suis encore plus perplexe
Comment ça peut fonctionner ? C'est la jointure ?
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h25   #11
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Tout juste !
__________________
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h28   #12
Modérateur
 
Avatar de Chtulus
 
Homme Cédric
Cherche à comprendre
Inscription : avril 2008
Messages : 2 263
Détails du profil
Informations personnelles :
Nom : Homme Cédric
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Cherche à comprendre

Informations forums :
Inscription : avril 2008
Messages : 2 263
Points : 4 421
Points : 4 421
Envoyer un message via MSN à Chtulus Envoyer un message via Skype™ à Chtulus
Bonsoir,

Ici !

__________________
- De quelque manière qu'on s'y prenne on s'y prend toujours mal -
-Sigmund Freud-

Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
Tous les cours Office

Chtulus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 08h26   #13
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
Merci beaucoup pour votre aide précieuse, je marque le sujet en résolu
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h34.


 
 
 
 
Partenaires

Hébergement Web