我有一个基于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行。
答案 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