table utilisateur
empid managerid firstname 1 2 b 2 null null 3 4 d 4 5 e 5 3 c
table utilisateur
empId ManagerId 1 2 2 null 3 4 4 5 5 3
résultat
empId FirstName 1 a 2 b 3 c 4 d 5 e
3 Réponses :
Vous pouvez utiliser uniquement une instruction LEFT JOIN avec la condition JOIN u.empID = m.ManagerId
select m.empID, m.managerID, u.FirstName from usermanager m left join user u on u.empID = m.ManagerId;
Démo
merci, si j'ajoute la condition où sélectionnez m.empID, m.managerID, u.FirstName de usermanager m à gauche rejoindre l'utilisateur u sur u.empID = m.ManagerId où m.empid = 3; la sortie est empid managerid firstname 3 4 d 4 5 e 5 3 c
@paramalasathya vous êtes les bienvenus. Assurez-vous que vous pouvez ajouter à la requête ci-dessus en commençant par le mot-clé where .
si j'ajoute où la sortie de condition ressemble à la sortie est empid managerid firstname 3 4 d 4 5 e 5 3 c
@paramalasathya si vous essayez avec la démo, vous obtiendrez empid managerid firstname 3 4 d uniquement. Voulez-vous obtenir empid managerid firstname 3 4 d 4 5 e 5 3 c ??
@ Barbaros Özhan oui je veux comme cette sortie empid managerid firstname 3 4 d 4 5 e 5 3 c
@paramalasathya Je pense que vous voulez avoir une requête hiérarchique pour déterminer tous les gestionnaires et sous-employés à partir de emp_id = 3. Pour cela, tout d'abord, nous devons connaître votre SGBD. Deuxièmement, cela n'entre pas dans le champ de cette question.
merci pour votre réponse, oui j'ai besoin d'une requête hiérarchique pour déterminer tous les gestionnaires et sous-employés à partir de emp_id = 3. pour cela, vous voulez des tables ou des informations dans mon local j'ai créé un exemple de table que je teste sur ces tables
c'est juste une jointure
select (columns that you want) from user u, user_manager um where u.empId = um.empId
c'est juste une jointure ... Hein? Où est votre JOIN ?
ma déclaration where est une jointure naturelle
Vous vouliez dire un CROSS JOIN - Cependant .... chaque fois que vous vous surprenez à utiliser WHERE par rapport à plus d'une table, vous devriez utiliser une instruction JOIN moderne et plus efficace
Les instructions sql sont traduites en interne à partir des dbms afin que vous puissiez l'écrire dans les deux sens, la stratégie de jointure sera décidée à partir des dbms donc plus efficace dépend de la stratégie sélectionnée en interne
Si vous souhaitez également voir des utilisateurs qui n'ont pas de gestionnaire, vous devez utiliser LEFT JOIN . Si vous souhaitez voir uniquement les utilisateurs qui ont des réponses précédentes de gestionnaire, cela devrait fonctionner pour vous.
Voici un exemple:
SELECT U.empId
, UM.ManagerId
, U.FirstName
FROM User U
LEFT JOIN UserManager UM ON U.empId = UM.empId
Astuce:
LEFT JOIN.Pourquoi pas
INNER JOIN?@ B001 ᛦ. . . Cette information doit être transmise à l'éditeur. Vous pouvez l'envoyer directement à Wiley ou m'envoyer un e-mail à l'adresse e-mail sur la couverture arrière du livre.
@GordonLinoff d'accord