SQL Server:嵌套选择查询

时间:2013-12-10 09:50:59

标签: sql .net sql-server

我有一个基于where子句返回结果的SQL查询。

我想在同一张表中添加更多结果,具体取决于第一个选择中的内容。

我的选择返回ID符合where条件的行。确实会发生该表有更多具有此ID的行,但这不符合初始where标准。我想使用一个select语句来获取具有相同ID的额外行,而不是通过单独的调用来重新查询数据库。 ID不是索引/ ID。它是我在这里使用的命名约定。

伪:(两步)

1: select * from table where condition=xxx

2: for each row returned, (select * from table where id=row.id)

我想这样做:

select 
    id as thisID, field1, field2, 
    (select id, field1, field2 from table where id = thisID) 
from 
    table 
where 
    condition=xxx

我的真实查询中有多个连接,并且无法使上述工作正常工作。遗憾的是我无法提供真正的查询,但是我收到了错误:

  

当EXISTS未引入子查询时,只能在选择列表中指定一个表达式。列名称'thisID'

无效

我的查询适用于多个连接,没有上述。我正在尝试将这些额外记录作为当前工作查询的一部分进行检索。

示例:

表格

select * from table where col3 = 'green'

id,   col1,  col2, col3

123 | blue | red | green
-------------------------
567 | blue | red | green
-------------------------
123 | blue | red | blue
-------------------------
890 | blue | red | green
-------------------------

我想返回所有4行,因为尽管row 3未通过where条件,但它与col1(123)具有相同的row 1值,我需要包含它,因为它是我需要定位/导入的“集合”的一部分,由id=123调用/引用。

我现在手动做的是获取第一行,然后根据第1行的ID运行另一个查询,以获得第3行。

2 个答案:

答案 0 :(得分:0)

您可以使用Where IN

select id as thisID, field1, field2 from table
where id in
 (select id from table where condition=xxx)

答案 1 :(得分:0)

试试这个

假设您的表位于下方并称为#Temp

Id  Col1    Col2    Col3
123 blue    red     green
567 blue    red     green
123 blue    red     blue
890 blue    red     green

id送到临时表

Create Table #T1(Id int)
Insert Into #T1
Select Id
From #Temp
Where Col3='green'

然后

Select distinct *
From #Temp
Where Id in (select Id from #T1) Or Col3='Green'

哪个结果来自主表

<强>更新

如果您想使用当前使用的方式,请尝试以下内容

select 
    id as thisID, field1, field2, 
    (select top 1 id from table where id = t.id) as Id,
    (select top 1 field1 from table where id = t.id) as field1,
    (select top 1 field2 from table where id = t.id) as field2,
from 
    table t
where 
    condition=xxx