2011-06-21 5 views
-1

J'ai une base de données avec la mise en page suivante:SQL requêtes de jointure avec plusieurs tables

employees (person_name, street, city) 
works (person_name, company_name, salary) 
companies (company_name, city) 
manages (person_name, manager_name) 

J'ai besoin de venir avec une requête qui me permettra de trouver tous les employés qui gagnent plus de leurs gestionnaires. Je sais que cela implique des jonctions assez intenses entre les employés, fonctionne, et gère les tables, et je ne peux pas en obtenir un qui fonctionnera. Quelqu'un peut-il m'aider et expliquer comment la solution est obtenue?

+0

ressemble à une question de devoirs – Balanivash

+1

http://en.wikipedia.org/wiki/Join_(SQL) – Ruben

Répondre

1
SELECT w.person_name 
FROM works w 
    INNER JOIN manages m 
     ON m.person_name = w.person_name 
      INNER JOIN works wManager 
       ON wManager.person_name = m.manager_name 
WHERE w.salary > wManager.salary 
2

Tout d'abord, le nom n'est pas une bonne clé.

La clé de la réponse est que vous pouvez vous joindre à une table plus d'une fois (souvenez-vous d'alias vos tables pour pouvoir distinguer celles que vous voulez référencer). Sans écrire la requête pour vous, cela signifie que vous devez sélectionner Employés, rejoindre via Travaux et Entreprises (cela vous donne le salaire des employés). Cela devrait être rejoint par Manages qui rejoint les employés pour obtenir les détails de votre gestionnaire. Cette version des employés peut être jointe à Works pour la deuxième fois pour obtenir votre salaire de gestionnaire. Ensuite, comparez simplement les salaires dans votre clause WHERE.

Questions connexes