Question

Voici le schéma relationnel donné:

employee (person-name , street, city)
works (person-name, company-name, salary)
company (company-name, city)
manages (person-name, manager-name)

Q:. Trouver les noms de tous les employés qui vivent dans la même ville et sur la même rue que faire leurs gestionnaires

Je trouve la solution quelque part: Solution

mais la solution semble erronée qui est juste après la deuxième bécarre-join il n'y a pas de sélection signe de déclaration et juste après ce signe, un apparaît sous-jacentes 0_o, en ce sens, d'où vient cet attribut manager-name vient ?. Je suis complètement perdu.

Ma solution semble être depuis longtemps je le produit cartésien, et la requête est un peu longue (dont je ne suis même pas sûr qu'il est bon ou mauvais) :(

Était-ce utile?

La solution

AVERTISSEMENT: Ne jamais Learned L'algèbre relationnelle, mais il semble intéressant

A partir du schéma et votre question, voici ce que le SQL doit être:

SELECT
    emp_mgr.person_name
FROM
    manages emp_mgr
    INNER JOIN employee emp ON emp_mgr.person_name  = emp.person_name
    INNER JOIN employee mgr ON emp_mgr.manager_name = mgr.person_name
WHERE
    emp.street = mgr.street AND
    emp.city = mgr.city
;

Voici une autre requête que seules les utilisations JOIN, aucune clause WHERE:

SELECT
    emp.person_name
FROM
    (SELECT A.person_name,B.street,B.city FROM manages A
    INNER JOIN employee B ON A.person_name = B.person_name) emp
    NATURAL JOIN
    (SELECT A.manager_name,B.street,B.city FROM manages A
    INNER JOIN employee B ON A.manager_name = B.person_name) mgr
;

La première requête obtient tous les employés qui sont gérés et leurs gestionnaires sous la forme d'un produit cartésien. Il cherche ensuite une rue commune et de la ville.

Le second recueille les dossiers du personnel requête (nom, rue, ville) des employés et de leurs gestionnaires et effectue une jointure naturelle entre les employess et leurs gestionnaires à l'aide (rue, ville).

Si vous pouvez transalate les deux requêtes retour à l'algèbre relationnelle, je pense que vous aurez ce que vous recherchez. Je crois que le second peut être de meilleure aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top