使用同一个表中的两个外键创建视图

时间:2014-06-30 15:19:33

标签: sql sql-server join create-table create-view

对于SQL和SQL Server,我还是新手,所以请耐心等待这个问题。我正在开展一个类似于我在下面创建的简单假设情况的项目。我有两个表,我试图创建一个视图:

CREATE TABLE Emp (
Emp_ID int IDENTITY(101,1) NOT NULL,
Emp_Name VARCHAR(10) NULL,
Emp_Boss int NULL,
PRIMARY KEY (Emp_ID),
CONSTRAINT fk_emp_boss FOREIGN KEY (Emp_Boss) REFERENCES Emp(Emp_ID));

CREATE TABLE Dept (
Dept_ID tinyint IDENTITY(101,1) NOT NULL,
Dept_Name VARCHAR(10) NULL,
Dept_Boss int NULL,
Dept_Emp int NULL,
PRIMARY KEY (Dept_Id),
CONSTRAINT fk_boss FOREIGN KEY (Dept_Boss) REFERENCES Emp(Emp_ID),
CONSTRAINT fk_emp FOREIGN KEY (Dept_Emp) REFERENCES Emp(Emp_ID));
INSERT INTO Emp (Emp_Name, Emp_Boss)
VALUES ('Marshal', 101), ('Lilly', 101), ('Robin', 101), ('Barney', 104), ('Ted', 104), ('Tracy', 104);
INSERT INTO Dept (Dept_Name, Dept_Boss, Dept_Emp)
VALUES ('Math',101,101), ('Math',101,102), ('Math',101,103), ('Physics',104,104),('Physics',104,105), ('Physics',104,106);

到目前为止,我有这个创建声明:

CREATE VIEW Tests AS
SELECT Dept_Name, Emp_Name AS Dept_Boss, Emp_Name 
FROM Dept, Emp 
WHERE Dept_Boss = Emp_ID AND 
Dept_Emp = Emp_ID;

但是这个陈述只创建了一个有两行的视图,这两行是两个老板。

我想要这样的事情:

Dept_Name | Dept_Emp | Dept_Boss
Math            | Marshal     | Marshal
Math            | Lilly           | Marshal
Math            | Tracy         | Marshal
Physics        | Barney      | Barney
Physics        | Robin        | Barney
Physics        | Ted           | Barney

有没有这样做?我知道为什么我写的CREATE VIEW只返回两行。这是因为只有这两行符合WHERE子句中的两个条件。我试图使用OR而不是AND,但是返回也会产生行,而实际上并没有与emp匹配boss。我能得到的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您必须为不同的条件加入您的EMP表两次

Alter VIEW Tests AS
SELECT Dept_Name, EMP1.Emp_Name, EMP2.Emp_Name AS Dept_Boss 
FROM Dept
JOIN EMP EMP1 on Dept_Emp = EMP1.Emp_ID 
JOIN EMP EMP2 on Dept_Boss = EMP2.Emp_ID