Sql 如何从查询结果中逐个获取值,并将其作为参数传递给另一个查询并循环它
我将从下面的查询中获取值。然后我将创建一个循环Sql 如何从查询结果中逐个获取值,并将其作为参数传递给另一个查询并循环它,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我将从下面的查询中获取值。然后我将创建一个循环 select a FROM [tbl_outer] where col=1 使用上面的循环,我需要从下面的查询中获取值(F.a=a) 我该怎么做?您能帮我一下吗。假设所有表都在同一个数据库中,您可以尝试一下(很遗憾,我现在无法测试它,但我很确定它会起作用): 解释 我使用了一个函数来保存第一次查询返回的所有值 对于第一个查询返回的每一行,这将从第二个查询中获取数据 如果第二个查询没有为第一个查询的给定行返回任何内容,则相应的列值(即t.cv和t
select a FROM [tbl_outer] where col=1
使用上面的循环,我需要从下面的查询中获取值(F.a=a)
我该怎么做?您能帮我一下吗。假设所有表都在同一个数据库中,您可以尝试一下(很遗憾,我现在无法测试它,但我很确定它会起作用): 解释
- 我使用了一个函数来保存第一次查询返回的所有值
- 对于第一个查询返回的每一行,这将从第二个查询中获取数据
- 如果第二个查询没有为第一个查询的给定行返回任何内容,则相应的列值(即
和t.cv
此处)将为t.fa
NULL
- 在第二个查询中,我为列使用了一些别名,以避免外部查询中的列名出现任何潜在的混淆
这个查询当然可以优化,但让我们先确认正确性。我只需添加一个附加的
连接条件:
select Distinct C.v, F.a
from tbl_outer o join
tbl_main f
on f.a = o.a join
tbl_inner1 C
on C.ID = F.ID and c.to = 0 join
tbl_inner2 E
on E.a = F.a join
tbl_inner3 G
on G.Id = E.Sales
where o.col = 1 and
C.v not in (select v
from table_4 t4
where t4.Month = month(getdate()) and t4.year = year(getdate())
);
注:
- 这将用更容易理解的
month()
和year()函数替换datepart()
- 所有列名都是限定的
- 如果您想保留所有匹配的
o.a
s,甚至那些没有其他匹配值的,您可能需要left join
s
术语“循环”在这里有点混乱。您的意思是,对于第一个查询返回的每一行,都要从第二个查询中获取值吗?另外,在最后的结果中,是否希望拥有第一个查询的所有行,即使第二个查询没有返回任何内容(外部联接)?或者,是否只保留第二个查询返回的值(内部联接)?是,根据第一个查询的结果,我将把结果传递给第二个查询,执行第二个查询后,需要转到第一个查询,然后从结果中选择第二行。。我想要第二个查询返回的值是同一数据库中的表tbl\u outer
和tbl\u innerX
?如果不是,数据库是否在同一台服务器上?是的,它们在同一个数据库中
select T.cv, T.fa, a
FROM [tbl_outer]
left outer join (
select Distinct C.v as cv, F.a as fa
from tbl_main as F
join tbl_inner1 as C on C.ID = F.ID and c.to = 0
join tbl_inner2 as E on E.a = F.a
join tbl_inner3 as G on G.Id = E.Sales
where C.v NOT IN(select v from table_4
where Month = DATEPART(month, GETDATE())
AND Year = DATEPART(yyyy, GETDATE()))
) T on a = T.fa
where col=1
select Distinct C.v, F.a
from tbl_outer o join
tbl_main f
on f.a = o.a join
tbl_inner1 C
on C.ID = F.ID and c.to = 0 join
tbl_inner2 E
on E.a = F.a join
tbl_inner3 G
on G.Id = E.Sales
where o.col = 1 and
C.v not in (select v
from table_4 t4
where t4.Month = month(getdate()) and t4.year = year(getdate())
);