假设我有这样的查询:
Select col1,
col2,
(select count(smthng) from table2) as 'records'
from table1
我希望将其过滤为“记录”列不为空。
我不能这样做:
Select col1,
col2,
(select count(smthng) from table2) as 'records'
from table1
where records is not null
我想出的最好的方法是将此结果集写入Table Value参数,并对该结果集进行单独查询。有什么想法吗?
答案 0 :(得分:3)
你应该在那里做一些修改:
首先,在子查询上添加TOP子句以强制查询仅返回该table2的一条记录。像你这样的子查询应该只返回一个标量值。
其次,子查询的列列表中只能有一列,所以返回值也应该是标量列。
最后,您无法过滤select子句中的子查询或任何make列。所以我的建议是使用"join"
或"exists"
。
Select col1,
col2
from table1
left outer join
table2
on table1.key = table2.key
where not table2.key is null
或者这个:
Select col1,
col2
from table1
inner join
table2
on table1.key = table2.key
或者这个:
Select col1,
col2
from table1
where exists (
select *
from table2
where table2.key = table1.key
and not table2.somethingelse is null
-- or any other relevant conditions
)
干杯