2017-08-27 1 views
0

J'ai une seule table nommée "Employés" où la colonne "Email" fait référence à l'e-mail de l'employé et la colonne "MgrEmail" à l'adresse e-mail de leur responsable direct.Opérateur SQL IN dans les requêtes imbriquées

J'ai créé une requête qui devrait trouver tous les employés de troisième niveau dans la hiérarchie de gestion. Cependant, il ne récupère pas les enregistrements corrects. Je ne sais pas pourquoi.

SELECT * 
FROM Employees 
WHERE MgrEmail IN 
    (SELECT Email 
    FROM Employees 
    WHERE MgrEmail IN 
     (SELECT Email 
      FROM Employees 
      WHERE MgrEmail='[email protected]')) 
+1

partager Veuillez données d'échantillons au format texte et le résultat souhaité – zarruq

+0

Ajouter des alias aux expressions de table et utiliser des préfixes pour montrer le moteur DB quelle instance de la table que vous le souhaitez interroger. – Serg

+0

qu'est ce que table 'sap'? –

Répondre

0

Si l'on suppose que le marqueur pour un gestionnaire est son e-mail de gestionnaire est NULL, alors une option serait de faire que deux auto-jointures de la table Employees, en commençant par les tiers employés de niveau, et l'arrêt lorsque nous trouvons un gestionnaire deux étapes plus haut.

SELECT e1.* 
FROM Employees e1 
INNER JOIN Employees e2 
    ON e1.MgrEmail = e2.Email 
INNER JOIN Employees e3 
    ON e2.MgrEmail = e3.Email 
WHERE e3.MgrEmail IS NULL  -- assuming that a manager would himself have no manager