如何基于另一个SELECT多行作为响应进行SELECT?

时间:2014-08-08 12:24:13

标签: sql sql-server

注意:不是一个精明的SQL编码器,我承认在询问之前我的谷歌搜索可能有缺陷。如果我错过了对他人显而易见的事情,请耐心等待。

我有一个 select 语句,它提供一行或多行作为回复。然后,我正在使用从第一行获取的参数执行不同的 select 语句。然后,我再次执行相同的 select 语句,但是从第二行获取参数,依此类推。

我想把它放在SQL中的单个语句中,但遗憾的是,我缺乏这方面的技巧。我该怎么做?

目前,我正在分别获取第一组数据。然后,我做了一些C#magic并分别执行以下每个参数化语句。 Waaay不整齐......

该问题可以重述如下。当然,这不是我最终会解决它的方式(会有一个SP这样做),但它显示了我们今天使用的方法,我们对此非常不满。

String mainCommand = "select Index from SomeTable";
...
foreach(String parameter in ...)
{
  String subCommand = 
    "select RealValue from AnotherTable where Index = " + parameter;
  ...
}

3 个答案:

答案 0 :(得分:3)

您希望使用连接操作和子查询同时执行所有操作。

这样的事情:

 SELECT [fields] from tbl_mainCommand
 JOIN 
 (SELECT [fields] from tbl_subCommand) 
     on tbl_mainCommand.fieldKey = tbl_subCommand.fieldKey

根据表的设置方式,子查询可能不是最有效的方法,因为它可能会导致correlated subquery。但最终关于SQL和集合论的好处是你可以同时执行这样的大规模操作,而不是迭代许多参数并运行多个SQL语句。

请注意,on tbl...行是表格之间的链接。这实际上是您将参数传递到第二个表或子查询的位置。如果您可以将其视为两个不同数据集之间的链接而不是传递参数,则更有可能避免使用相关子查询。

答案 1 :(得分:1)

使用CTE最容易做到:

With IndexSet AS 
(Select index from SomeTable)
Select RealValue from AnotherTable INNER JOIN 
                      IndexSet ON AnotherTable.INdex=INdexSet.Index 

答案 2 :(得分:1)

让我们说

table1 = {Id1, name, etc...}
table2 = {Id2, name, Id1, etc...}

我理解你想要的是,例如,从表1中选择一个行来获取一些行,然后对表2中的那些行中的项进行不同的选择。 这可以通过以下方式实现:

SELECT * FROM TABLE2 
 WHERE ID1 IN (SELECT ID1 FROM TABLE1 WHERE="WhatEver condition you are looking for")

这在表2中执行选择,其中列Id1位于第二个选择的列表中(仅显示表1中满足条件的Id列表)