Requete et relation (0,n)

Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008 - 23 sept. 2008 à 12:37
EricSQL Messages postés 33 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 24 février 2011 - 11 oct. 2008 à 18:00
Bonjour,

J'ai 2 tables avec la structure suivante
ITEM
- id_item (clef primaire)
- nom
- id_class

ITEM_CLASS
- id_class (clef primaire)
- nom

La table ITEM_CLASS contiens les noms de class pour les items.


Parmis les lignes de ma table ITEM, la colonne id_class peut contenir la valeur null (les tables sont liées par une relation 0,n).
J'aimerais recuperer pour chaque item son nom et le nom de sa class s'il existe. Sinon la valeur null.
Ma requete actuelle:
SELECT ITEM.nom, ITEM_CLASS.nom
FROM ITEM, ITEM_CLASS
WHERE ITEM.id_class = ITEM_CLASS.id_class
ne me renvoie que les "items" qui ont un nom de class. J'aimerais aussi les autre (ceux qui n'en ont pas).

Puis-je obtenir le tout en une seule requete ?

6 réponses

crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
23 sept. 2008 à 14:42
Pour cela, il faut faire une jointure de table :

SELECT ITEM.nom, ITEM_CLASS.nom
FROM ITEM LEFT OUTER JOIN ITEM_CLASS
WHERE ITEM.id_class = ITEM_CLASS.id_class

Cette requète te donnera tous les enregistrments de la table ITEM et les enregistrements de la table ITEM_CLASS lorsqu'il y a correspondance id_class
0
Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008
23 sept. 2008 à 17:14
Oui, c'est exactement ce que j'obtiens actuellement.
Cependant, j'aimerais aussi obtenir les enregistrement lorsqu'il n'y a pas correspondance.
Est-ce possible en une seule requete ?
0
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
23 sept. 2008 à 17:25
SELECT ITEM.nom, ITEM_CLASS.nom
FROM ITEM LEFT OUTER JOIN ITEM_CLASS
WHERE  ITEM_CLASS.id_class IS NULL
0
Deeddolith Messages postés 20 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 4 octobre 2008
23 sept. 2008 à 19:36
Je vais formuler ma question autrement:

Dans mes lignes de resultats, pour un item, si ITEM.class a une valeur, je veux obtenir le nom correspondant ET si ITEM.class est null, je veux obtenir null.
Le but est d'obtenir des lignes de resultats qui ressemblent a ceci:

ITEM.nom        ITEM_CLASS.nom
----------------------------------
Rubis           Bijouretrie
Laine           Couture
Clous           Ferronerie
Caillou         null
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
26 sept. 2008 à 14:36
je persiste et je signe

SELECT ITEM.nom, ITEM_CLASS.nom
FROM ITEM LEFT OUTER JOIN ITEM_CLASS
WHERE ITEM.id_class = ITEM_CLASS.id_class
0
EricSQL Messages postés 33 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 24 février 2011
11 oct. 2008 à 18:00
D'accord avec crn_c21

/Eric
0
Rejoignez-nous