2014-06-30 48 views
0

当谈到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语句:

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,但返回也使得行和a实际上不匹配老板和emp。任何帮助,我可以得到这将不胜感激!

+0

查询是要求那些谁是自己当老板的员工,基本上是这样。例如Marshal/101和Physics/104是您的条件满足的唯一两条记录。 –

+0

我知道这一点,这就是为什么我的问题是如何改变查询,所以它不会要求那些是他们自己老板的员工。顺便提一下,感谢编辑提问。 – user3694592

回答

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 
+0

我不能相信我完全忘记了我可以使用JOIN。谢谢你的回答!此解决方案完美运作。 – user3694592

相关问题