Dan*_*don 5 sql sql-server-2008
假设我有一个如下所示的SQL查询:
SELECT fName from employees where ssn=123456789;
Run Code Online (Sandbox Code Playgroud)
假设我想跟随另一个查询:
SELECT fName from records WHERE ssn=123456789;
SELECT lName from records WHERE fName=(the result of the previous query)
Run Code Online (Sandbox Code Playgroud)
(the result of the previous query)
为了使fName与ssn = 123456789的大概唯一记录相匹配的记录,我该怎么做才能返回姓氏?
我知道这是一个不切实际的例子,但我要问的是,"我如何参考我之前查询的结果?"
顺便说一句,如果它有任何区别,我正在使用MS SQL Server 2008.谢谢!
您可以将第一个查询的结果保存到变量中,并在第二个查询中使用该变量.
DECLARE @firstName VARCHAR(255)
SELECT @firstName = fName from employees where ssn=123456789
SELECT lName from records WHERE fName=@firstName
Run Code Online (Sandbox Code Playgroud)
SELECT lName from records WHERE fName =(SELECT fName from employees where ssn=123456789)
Run Code Online (Sandbox Code Playgroud)
要么
SELECT lName from records r
INNER JOIN employees e ON (e.fName = r.fName)
WHERE e.ssn = 123456789
Run Code Online (Sandbox Code Playgroud)
或者您也可以使用CTE.
有三种明显的方法可以做到这一点。您可以使用SQL变量,临时表(或表变量,它们大致等效),也可以使用子查询。
SQL变量
在这里,您将所需的值存储在变量中(下面的@fname代码段),然后可以稍后使用。使用这种方法时,您需要注意,SSN实际上是唯一的标识。
Declare @fname Varchar(50)
Select @fname = fname
from employees
Where ssn = 123456789
Select lName from records
where fname = @fname
Run Code Online (Sandbox Code Playgroud)
临时表
使用临时表,您可以创建所需记录的表。然后可以在以后使用它,并在子查询中使用临时表获取所需的记录。
您可以将临时表声明为单独的create table
语句,也可以像下面所做的那样将其声明为选择的一部分。
Select fname into #temptable
From employees
Where ssn = 123456789
Select lName from records
where fname in
(
Select fname
from #temptable
)
Run Code Online (Sandbox Code Playgroud)
子查询
实际上,这与临时表方法非常相似,但是您内嵌了临时表部分,因此以后就无法再次引用它。
Select @fname = fname
from employees
Where ssn = 123456789
Select lName from records
where fname in
(
Select fname
from employees
Where ssn = 123456789
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5934 次 |
最近记录: |