假设我有一个如下所示的SQL查询:
SELECT fName from employees where ssn=123456789;
假设我想用另一个查询跟随上一个查询:
SELECT fName from records WHERE ssn=123456789;
SELECT lName from records WHERE fName=(the result of the previous query)
我为(the result of the previous query)
做什么让它从fName与ssn = 123456789的大概唯一记录匹配的记录中返回姓氏?
我知道这是一个不切实际的例子,但我要问的是,“我如何参考我之前查询的结果?”
顺便说一句,如果它有任何区别,我正在使用MS SQL Server 2008.谢谢!答案 0 :(得分:7)
您可以将第一个查询的结果保存到变量中,并在第二个查询中使用该变量。
DECLARE @firstName VARCHAR(255)
SELECT @firstName = fName from employees where ssn=123456789
SELECT lName from records WHERE fName=@firstName
答案 1 :(得分:5)
SELECT lName from records WHERE fName =(SELECT fName from employees where ssn=123456789)
OR
SELECT lName from records r
INNER JOIN employees e ON (e.fName = r.fName)
WHERE e.ssn = 123456789
或者您也可以使用CTE。
答案 2 :(得分:5)
有三种明显的方法可以做到这一点。您可以使用SQL变量,临时表(或表变量,它们大致相同),也可以使用子查询。
SQL变量
在这里,您将所需的值存储在变量(下面的@fname代码段)中,然后您可以在以后使用它。使用这种方法,您需要注意您的SSN确实是唯一的标识符。
Declare @fname Varchar(50)
Select @fname = fname
from employees
Where ssn = 123456789
Select lName from records
where fname = @fname
临时表
使用临时表,您可以创建所需记录的表。然后可以在以后使用它,并获取您想要的记录,然后在子查询中使用临时表。
您可以将临时表声明为单独的create table
语句,也可以将其声明为选择的一部分,如下所示。
Select fname into #temptable
From employees
Where ssn = 123456789
Select lName from records
where fname in
(
Select fname
from #temptable
)
子查询
这实际上与临时表方法非常相似,但您可以内联临时表部分,因此以后不能再次引用它。
Select @fname = fname
from employees
Where ssn = 123456789
Select lName from records
where fname in
(
Select fname
from employees
Where ssn = 123456789
)