Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1371 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Acess et champ NULL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Acess et champ NULL

n°1330874
weblook$$
Posté le 23-03-2006 à 11:16:41  profilanswer
 

j'ai une table définit ainsi
 
NULL interdit: NON
chain vide autorisé: OUI
 
les structure et les données de cette table sont :
 
numéro prénom nom
 
1    h   t
2    g
3    v   d
 
je voudrais écrire une requête qui me sélectionne les prénoms dont le nom est vide/null
je pensais à ça :
select prénom from table1 where nom=""  
mais ça ne me renvoie rien.
 
d'autres idées ?
merci

mood
Publicité
Posté le 23-03-2006 à 11:16:41  profilanswer
 

n°1331001
olivthill
Posté le 23-03-2006 à 13:25:06  profilanswer
 

Il existe plusieurs moyens pour faire cela.
Personnellement, j'utiliserais la fonction Nz(), qui retourne le second paramètre dans le cas d'une donnée nulle :

SELECT prénom
  FROM table1
 WHERE Nz(nom, "" ) = ""


n°1331029
weblook$$
Posté le 23-03-2006 à 13:49:43  profilanswer
 

merci , et sur des SGBD utilisant le SQL standard ma requête aurait marchée ou pas ?

n°1331130
dlaumor
Posté le 23-03-2006 à 15:52:30  profilanswer
 

non : "" (vide) n'est pas la même chose que NULL ce sont 2 valeurs différentes.

n°1331131
dlaumor
Posté le 23-03-2006 à 15:53:32  profilanswer
 

Sur Oracle par exemple, faut voir pour les autres, faut utiliser IS NULL
 

Code :
  1. SELECT prénom  FROM table1
  2. WHERE nom IS NULL


 
Edit: Ca fonctionne d'ailleurs aussi avec Access


Message édité par dlaumor le 23-03-2006 à 15:56:16
n°1331218
olivthill
Posté le 23-03-2006 à 17:14:05  profilanswer
 

Sous Oracle, la fonction qui ressemble le plus à Nz() est NVL().

n°1331290
weblook$$
Posté le 23-03-2006 à 19:45:21  profilanswer
 

donc en SQL le concept de chaine vide n'existe pas, c'est soit null ou pas null.
c'est ça ?

n°1331291
weblook$$
Posté le 23-03-2006 à 19:47:14  profilanswer
 

enfin pourquoi est ce ="" ne marche pas?
je pige pas

n°1331410
olivthill
Posté le 23-03-2006 à 23:36:15  profilanswer
 

Citation :

pourquoi est ce ="" ne marche pas?


Les champs, pouvant avoir une valeur nulle, ont un petit drapeau associé qui indique si le champ est nul ou pas. En théorie, une donnée ayant le drapeau mis à nul peut avoir un contenu quelconque, car un SGBD peut juste changer le drapeau sans changer le contenu quand l'utilisateur fait un update tb1 set champ1 = null. Ne mettre à jour que le drapeau sans remettre à vide le champ fait gagner quelques fractions de pouillième de seconde.
Le concept de chaine vide existe aussi, mais un champ vide n'est pas forcément nul et inversement.
Donc, dans la plupart des cas, il faut tester à la fois si le champ est null et s'il est vide, avec les moyens montrés dans les autres messages ci-dessus.

n°1331525
dlaumor
Posté le 24-03-2006 à 10:56:16  profilanswer
 

weblook$$ a écrit :

enfin pourquoi est ce ="" ne marche pas?
je pige pas


 
 
Parce que NULL est différent de ""

mood
Publicité
Posté le 24-03-2006 à 10:56:16  profilanswer
 

n°1331688
weblook$$
Posté le 24-03-2006 à 13:45:31  profilanswer
 

olivthill a écrit :

Citation :

pourquoi est ce ="" ne marche pas?


Les champs, pouvant avoir une valeur nulle, ont un petit drapeau associé qui indique si le champ est nul ou pas. En théorie, une donnée ayant le drapeau mis à nul peut avoir un contenu quelconque, car un SGBD peut juste changer le drapeau sans changer le contenu quand l'utilisateur fait un update tb1 set champ1 = null. Ne mettre à jour que le drapeau sans remettre à vide le champ fait gagner quelques fractions de pouillième de seconde.
Le concept de chaine vide existe aussi, mais un champ vide n'est pas forcément nul et inversement.
Donc, dans la plupart des cas, il faut tester à la fois si le champ est null et s'il est vide, avec les moyens montrés dans les autres messages ci-dessus.


 
exactement ce que je voulais savoir merci

n°1331724
weblook$$
Posté le 24-03-2006 à 14:16:47  profilanswer
 

j'ai crée deux cas
 

  • prenom = "" et update pour mettre le drapeau à null

  • prenom = "" et pas d'update


quand j'éxécute cette requête :
 
SELECT nom FROM Table1 WHERE nz(prenom,"" )="" And prenom Is Not Null
 
ça me retourne rien, alors que je m'attendais à ce que me retourne la ligne dans laquelle je n'ai pas mis le champ à null (deuxième cas décrit)
why?

n°1331742
dlaumor
Posté le 24-03-2006 à 14:30:40  profilanswer
 

dans ta requete tu ne prends pas en compte le champ ""
 
nz(prenom,"" )=""  te permet de transformer NULL en ""
donc nz(prenom,"" )="" est equivalent à IS NULL
 
ta requete doit devenir :  
 
SELECT nom FROM Table1 WHERE prenom="" And prenom Is Not Null
 
mais à mon avis, And prenom Is Not Null ne sert à rien ici la première condition suffit.


Message édité par dlaumor le 24-03-2006 à 14:31:48
n°1331768
weblook$$
Posté le 24-03-2006 à 15:10:26  profilanswer
 

non justement SELECT nom FROM Table1 WHERE prenom="" ne me renvoie rien

n°1331771
weblook$$
Posté le 24-03-2006 à 15:15:06  profilanswer
 

y'a un truc qui n'est toujours pas clair

n°1331772
weblook$$
Posté le 24-03-2006 à 15:15:20  profilanswer
 

moi je suis embrouillé là

n°1331781
dlaumor
Posté le 24-03-2006 à 15:20:33  profilanswer
 

SELECT nom FROM Table1 WHERE prenom is null
 
ca te renvoie qqchose ?

n°1331783
dlaumor
Posté le 24-03-2006 à 15:23:47  profilanswer
 

je pense à un truc là, champs vide c'est pas "" mais '' (l'apostrophe)
 
Cette requete là ca donne quoi ?
 
SELECT nom FROM Table1 WHERE prenom=''

n°1331787
dlaumor
Posté le 24-03-2006 à 15:30:11  profilanswer
 

je pense aussi que quand tu vides un champ il le met à NULL et pas à ''.

n°1331796
weblook$$
Posté le 24-03-2006 à 15:37:26  profilanswer
 

SELECT nom FROM Table1 WHERE prenom='' ne marche pas , Access me signale une erreur de syntaxe

n°1331799
weblook$$
Posté le 24-03-2006 à 15:38:21  profilanswer
 

et SELECT nom FROM Table1 WHERE prenom is null , ça marche

n°1331802
weblook$$
Posté le 24-03-2006 à 15:40:07  profilanswer
 

bref je suis toujours pas ok pour la distinction entre NULL interdit: NON
/OUI et  chaine vide autorisé: OUI/NON , lors de la création d'une table sous Acces

n°1331838
jeoff
Posté le 24-03-2006 à 16:02:24  profilanswer
 

attention, j'ai vu des accents dans ton message initial (prénom) puis plus d'accents après (prenom).

n°1331858
weblook$$
Posté le 24-03-2006 à 16:24:01  profilanswer
 

oui c'était juste des exemples , le problème ne vient pas delà, merci tout de même

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Acess et champ NULL

 

Sujets relatifs
[RESOLU] problème champ floatval en SQL[PHP/MySQL] Ajout de champ dynamique et checkbox
[PHP-MYSQL] Accès au bon champ d'une table[MySQL 4.0] comment convertir un champ timestamp?
requête mysql pour récupérer plusieurs valeurs sur 1 champListe déroulante et champ texte activable/désactivable
ajouter un événement onfocus à un champ input[MySQL] Quel type de champ pour quel type de données ?
Tester si variable est NULL ? [résolu]Newbies NULL & NOT NULL
Plus de sujets relatifs à : Acess et champ NULL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR