SQL:我如何引用先前查询的结果?

时间:2010-02-09 22:34:13

标签: sql sql-server-2008

假设我有一个如下所示的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.谢谢!

3 个答案:

答案 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 
)