2010-11-23 20 views
1

Je dois créer une vue pour afficher tous les enregistrements de chacune des tables dépendantes des employés, et également afficher la date de jointure de chaque employé ainsi que celle de cet employé particulier table. J'ai utilisé le code suivant, mais il montre une erreur lorsque j'essaie de l'exécuter.Création d'une vue pour afficher les enregistrements de plus de deux tables

CREATE VIEW EmpDependent 
AS 
SELECT JoinDate 
FROM Lecturer,BranchManager,NonAcademicStaff 
INNER JOIN LecDependent.EmpRegNo=Lecturer.EmpRegNo=BranchManager.EmpRegNo=NonAcademicStaff.EmpRegNo 

S'il vous plaît aider

+1

Quelle est l'erreur? –

+0

Est-ce que cette instruction 'select', lorsqu'elle est exécutée par elle-même, renvoie ce que vous cherchez? – chezy525

+0

dans vous avez quitté - lecdepedent - –

Répondre

1

Votre syntaxe de jointure est incorrecte. En général, à se joindre à deux tables A et B vous devez faire ce qui suit:

select a.*, b.* 
from A a inner join B b on b.a_id = a.id 

Étant donné que la table A a une colonne appelée id et une table B a une colonne nommée a_id (éventuellement et de préférence une clé étrangère) .

Vous pouvez ajouter autant de jointures internes comme comme, par exemple, vous pouvez étendre ci-dessus avec:

inner join C on c.b_id = b.id 

Une fois que vous créez une déclaration select qui renvoie les lignes que vous attendez, vous pouvez créer une vue basée sur cette déclaration.

1

Vous devez utiliser quelque chose comme:

CREATE VIEW EmpDependent AS 
    SELECT N.JoinDate 
     FROM Lecturer   AS L 
     JOIN BranchManager AS B ON L.EmpRegNo = B.EmpRegNo 
     JOIN NonAcademicStaff AS N ON B.EmpRegNo = N.EmpRegNo 

Cependant, votre requête énumère une LecDependent de table qui ne sont pas cités dans la clause FROM, et on ne sait pas pourquoi un conférencier est aussi un personnel non enseignant membre et un directeur de succursale (et peut-être un conférencier est également leur propre personne à charge).

Vous n'avez pas non plus donné d'indication sur la table qui contient la colonne JoinDate - j'ai deviné NonAcademicStaff, mais ce pourrait être l'un d'entre eux. Et il est peu probable que vous ayez besoin d'une jointure de 3 tables (ou d'une jointure de 4 tables) pour une seule colonne sans un certain nombre de conditions de filtre.

Dans l'ensemble, vous devez réfléchir sérieusement à la requête que vous encapsulez dans la vue.

+0

en fait chacune des tables, Lecturer, BranchManager et NonAcademicStaff se compose de la colonne JoinDate. et la personne à charge est également similaire à celle de LecDependent, BrManDependent et NonAcdependent. Donc, la sortie devrait être tous les détails dépendants et le JoinDate ainsi – Yoosuf

+0

@Yoosuf: alors quelle est la vue censée montrer? Quelles sont les grandes lignes de chaque table? J'insiste sur mon dernier commentaire - «vous devez réfléchir sérieusement à la question que vous encapsulez». En fait, vous devez avoir une bonne requête de travail avant d'essayer de l'encapsuler dans une vue. –

+0

La vue devrait montrer le JoinDate de chacun des employés (conférencier, branchManager et NonAcademicStaff) ainsi que toutes leurs informations dépendantes respectives – Yoosuf