SQL: 将 AND 语句与嵌套查询一起使用
SQL: Using the AND statement with nested queries
我正在学习在线教程系列,现在我们正在研究嵌套查询。试着尝试并想出我可以使用这个概念的方法,我想尝试进行组合嵌套查询,但我不太确定如何,而且 google 并没有给我带来太多运气。再一次很难用这样的话来表达。我正在使用 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 语句而且我有一种偷偷摸摸的感觉我必须将两者嵌套在一起并在嵌套中嵌套。
它就像在肯德基内的塔可钟内的炸玉米饼内的炸玉米饼,在您梦想中的购物中心内!抱歉我没办法。
正如评论中所指出的,问题有两个 WHERE
。只需要第一个WHERE
;在指定 WHERE
之后,可以使用 AND、OR 之类的方式连接条件。取消注释并删除第二个 WHERE
应该可以解决它。所以,不要写“WHERE a=b AND WHERE c=d”,而是写“WHERE a=b AND c=d”。
只需删除第二个“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 但在 Warehouse 工作且年龄为 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)
我正在学习在线教程系列,现在我们正在研究嵌套查询。试着尝试并想出我可以使用这个概念的方法,我想尝试进行组合嵌套查询,但我不太确定如何,而且 google 并没有给我带来太多运气。再一次很难用这样的话来表达。我正在使用 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 语句而且我有一种偷偷摸摸的感觉我必须将两者嵌套在一起并在嵌套中嵌套。
它就像在肯德基内的塔可钟内的炸玉米饼内的炸玉米饼,在您梦想中的购物中心内!抱歉我没办法。
正如评论中所指出的,问题有两个 WHERE
。只需要第一个WHERE
;在指定 WHERE
之后,可以使用 AND、OR 之类的方式连接条件。取消注释并删除第二个 WHERE
应该可以解决它。所以,不要写“WHERE a=b AND WHERE c=d”,而是写“WHERE a=b AND c=d”。
只需删除第二个“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 但在 Warehouse 工作且年龄为 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)