SQL Server:嵌套选择查询
我有一个基于where子句返回结果的SQL查询 我想从同一个表中包含更多的结果,具体取决于在第一个select中找到的内容 My select返回ID符合where条件的行。表中确实有更多具有此ID的行,但不符合初始where条件。我希望使用一个select语句来获得这些具有相同ID的额外行,而不是使用单独的调用来重新查询DB。ID不是索引/ID。我在这里使用的是命名约定 伪:两步SQL Server:嵌套选择查询,sql,.net,sql-server,Sql,.net,Sql Server,我有一个基于where子句返回结果的SQL查询 我想从同一个表中包含更多的结果,具体取决于在第一个select中找到的内容 My select返回ID符合where条件的行。表中确实有更多具有此ID的行,但不符合初始where条件。我希望使用一个select语句来获得这些具有相同ID的额外行,而不是使用单独的调用来重新查询DB。ID不是索引/ID。我在这里使用的是命名约定 伪:两步 1: select * from table where condition=xxx 2: for each r
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”无效
我的查询可以很好地处理多个连接,而不需要上面的内容。作为当前工作查询的一部分,我正在尝试检索这些额外记录
例如:
桌子
我想返回所有4行,因为尽管第3行未满足where条件,但它与第1 123行具有相同的col1值,我需要将其包括在内,因为它是我需要定位/导入的集合的一部分,由id=123调用/引用
我现在手动执行的是获取第一行,然后根据第1行的ID运行另一个查询,以获取第3行。您可以使用
试试这个
假设您的表在下面,称为临时表
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
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
这似乎与OP想要的输出不匹配-他希望显示每一行的匹配条件。我认为是这样的。。OP“似乎”想要所有属于“绿色”类别的ID的所有信息。。。那么,你能给我们一些数据布局的例子吗?您是否有每行唯一的id?不要求id是唯一的?子查询中是否也应显示匹配行?如果多个行具有相同的键,会发生什么情况?子查询是否应该报告这些行,但使用不同的行和唯一id列出它们?为了获得最佳结果,请尽可能完整地发布一个查询,如果需要,请匿名。嗨@Clockwork Muse,该查询有5个连接和很多很多字段。。。我正在从一个旧系统导入数据,作为我们正在开发的新系统的一部分。我会补充一些细节。目前,我已经开始重新查询每个初始行,因为我需要取得一些进展,但我希望以上内容能够用于将来的参考。这很好,但除非您告诉我们在复制一般值时,您希望数据是什么样子,否则我们无法明智地帮助您。见鬼,你可能会对结果感到惊讶…@Clockwork缪斯,我加了一个例子和我提到的其他情况?如果有另一份id为123且为绿色的副本,会发生什么情况?您的结果集只是4列宽的行的副本,还是您希望先使用“匹配行”列,然后使用8列的行的非匹配列?如前所述,我需要在一个查询中使用它,作为更大联接的一部分。我不知道;我不认为临时表的创建会在这里起作用,因为这基本上就是我现在用代码手动完成的。我必须为返回的每一条原始记录创建一个临时表,内联,以获取其余记录。此查询在包含数千条记录的表上运行。不确定这是否可行?@LouisvanTonder:你不能在子队列中选择多个列作为字段!!所以我明白了:-不能解决我的问题,但是。。。我想要什么,只需要一个问题就可以了吗?@LouisvanTonder:不太确定。。我已经更新了答案。请试一试
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