Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从查询结果中逐个获取值,并将其作为参数传递给另一个查询并循环它_Sql_Sql Server 2008_Tsql - Fatal编程技术网

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())
                 );