我想在我的数据库中执行这个查询。你可以看到表A和B都有一对多的关系,但我需要B.so中的最新记录我这里是我的查询:
select *,(select top 1 ResultTest ,ResultState2 from B where GasReceptionId=A.Id order by Id desc)
from A where OrganizationGasId= 4212
但是我得到了这个错误
Msg 116, Level 16, State 1, Line 2
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
答案 0 :(得分:1)
您可以将此查询重新定义为基本联接,它使用分析函数(例如行号)来识别来自B
的正确行数据,以包含来自{{1}的每条记录} table。
A
答案 1 :(得分:1)
SELECT
子句中的子查询必须只返回一列(以及一行或零行)。所以你可以有两个子查询:
select
a.*,
(select top 1 resulttest from b where gasreceptionid = a.id order by id desc) as test,
(select top 1 resultstate2 from b where gasreceptionid = a.id order by id desc) as state
from a
where a.organizationgasid = 4212;
或者,更好的是,将子查询移动到FROM
子句。一种方法是OUTER APPLY
:
select
a.*, r.resulttest, r.resultstate2
from a
outer apply
(
select top 1 resulttest, resultstate2
from b
where gasreceptionid = a.id
order by id desc
) r
where a.organizationgasid = 4212;