Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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 Server:嵌套选择查询_Sql_.net_Sql Server - Fatal编程技术网

SQL Server:嵌套选择查询

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

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

我想从同一个表中包含更多的结果,具体取决于在第一个select中找到的内容

My select返回ID符合where条件的行。表中确实有更多具有此ID的行,但不符合初始where条件。我希望使用一个select语句来获得这些具有相同ID的额外行,而不是使用单独的调用来重新查询DB。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”无效

我的查询可以很好地处理多个连接,而不需要上面的内容。作为当前工作查询的一部分,我正在尝试检索这些额外记录

例如:

桌子

我想返回所有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