0

我正在学习一个在线教程系列,现在我们正在研究嵌套查询。尝试四处玩耍并思考我可以使用这个概念的方法,我想尝试进行组合嵌套查询,但我不太确定如何谷歌并没有给我带来太多运气。再一次很难说出这样的话。我正在使用 MS SQL

SELECT EmployeeID, FirstName, LastName
FROM SQLTutorial.dbo.EmployeeDemographics 

WHERE EmployeeID
IN (SELECT EmployeeID
FROM SQLTutorial.dbo.EmployeeSalary
WHERE JobTitle = 'DBA')

/*
AND 

WHERE EmployeeID 
IN (SELECT EmployeeID
FROM SQLTutorial.dbo.WareHouseEmployeeDemographics
WHERE Age = 29)
*/

这是我认为我能做到的。从示例中我知道未注释的部分有效。如果 ID 在 EDemo 和 ESalary 中,并且他们的职位是 DBA,它会从 EDemo 获取 ID、名字和姓氏。

好吧,我想进一步限制这些结果,只让结果是那些在仓库工作并且是 29 岁的人。

我的意思是,如果我在没有未注释的情况下运行注释代码,它也会像预期的那样工作,但我不确定为什么我不能将两者结合起来。我 90% 确定它是 b/c 我不能像这样使用 AND 语句,我有一种偷偷摸摸的感觉,我必须将两者嵌套在一起并在一个巢中筑巢。

它就像一个墨西哥卷饼在一个塔可钟里面,在肯德基里面,在你梦想中的购物中心里面!对不起,我无法自拔。

4

2 回答 2

1

只需删除第二秒“Where”,您的查询就可以很好地执行。您只需要一个 where 子句,您可以在其中将所有条件与 and,or 等结合起来。

SELECT EmployeeID, FirstName, LastName
FROM SQLTutorial.dbo.EmployeeDemographics 

WHERE EmployeeID
IN (SELECT EmployeeID
FROM SQLTutorial.dbo.EmployeeSalary
WHERE JobTitle = 'DBA')

AND EmployeeID 
IN (SELECT EmployeeID
FROM SQLTutorial.dbo.WareHouseEmployeeDemographics
WHERE Age = 29)

如果您希望所有 ID 为 EDemo 和 ESalary 且职称为 DBA 但或在仓库工作且年龄为 29 岁的员工。

 SELECT EmployeeID, FirstName, LastName
    FROM SQLTutorial.dbo.EmployeeDemographics 
    
    WHERE EmployeeID
    IN (SELECT EmployeeID
    FROM SQLTutorial.dbo.EmployeeSalary
    WHERE JobTitle = 'DBA')
    
    or EmployeeID 
    IN (SELECT EmployeeID
    FROM SQLTutorial.dbo.WareHouseEmployeeDemographics
    WHERE Age = 29)
于 2021-03-12T19:15:14.793 回答
0

正如评论中所指出的,这个问题有两个WHEREs. 只WHERE需要第一个;在指定之后WHERE,可以使用 AND、OR 之类的东西来连接条件。取消注释并删除第二个WHERE应该可以解决它。所以,不要写“WHERE a=b AND WHERE c=d”,而是写“WHERE a=b AND c=d”。

于 2021-03-12T19:14:47.530 回答