2012-09-26 1 views
2

Voici l'exigencedéclaration de base SQL, sélectionnez le nom du personnel de la table du personnel

J'ai deux tables comme ci-dessous, ListeCommande est une table de données qui comprennent 3 champs stockés StaffID qui est une clé étrangère de la table du personnel. A noté que certains enregistrements peuvent ne pas avoir une valeur dans cette table.

ListeCommande

OrderId Marketing_Staff_ID Finance_Staff_Id ManagerId 
1  STAFF001   STAFF002   STAFF003 
2       STAFF005   STAFF003 
3  STAFF004   STAFF004   STAFF003 
4  STAFF001   STAFF002   STAFF003 
5  STAFF001       STAFF007 

Personnel

Staff_Id Staff_Name 
STAFF001 Jack C.K. 
STAFF002 William. C 
STAFF005 Someone 

Je veux écrire une instruction SQL peut également sélectionner le nom du personnel pour chaque forme d'enregistrement ListeCommande, (Pour ces enregistrements sans ID personnel, laisser N/A dans le champ de nom)

OrderId Mkt StaffID Name  Finance StaffId Name  ManagerId, Name 
1  STAFF001 Jack C.K. STAFF002   William. STAFF003 Chan.Chi 

Alors, comment puis-je écrire le SQL? Gauche rejoint ou sth?

Merci beaucoup car je suis vraiment un débutant en SQL.

Répondre

5

Vous avez besoin de plusieurs LEFT JOIN s:

select ol.orderid, 
     ol.marketing_staff_id, 
     coalesce(ms.staff_name, 'n/a') as marketing_name, 
     ol.finance_staff_id, 
     coalesce(fi.staff_name, 'n/a') as finance_name 
from orderlist as ol 
    left join staff as ms on ms.staff_id = ol.marketing_staff_id 
    left join staff as fi on fi.staff_id = ol.finance_staff_id 

Je vais laisser à vous d'ajouter la jointure pour le gestionnaire.

Ce qui précède est ANSI SQL et devrait fonctionner dans tous les SGBD. Il y a une légère possibilité que votre SGBD ne supporte pas la fonction coalesce qui remplace simplement une valeur NULL par quelque chose de différent. Vous devrez vérifier le manuel de votre SGBD dans ce cas.

Questions connexes