注意:不是一个精明的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;
...
}
答案 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列表)