Sql ASP:子查询返回了多个值
我有一个本地托管的网站,带有MS SQL Server数据库。我试图填充数据库中的记录列表,但查询返回错误 asp网页上的代码:Sql ASP:子查询返回了多个值,sql,database,subquery,Sql,Database,Subquery,我有一个本地托管的网站,带有MS SQL Server数据库。我试图填充数据库中的记录列表,但查询返回错误 asp网页上的代码: dim sRegID sRegID = Request.QueryString("RegistrantID") sSQL = "select CourseID, CourseSectionID, RegistrationID, RegistrantCourseID,AmountDeferred,PaymentType, DateSubmitted, (select
dim sRegID
sRegID = Request.QueryString("RegistrantID")
sSQL = "select CourseID, CourseSectionID, RegistrationID, RegistrantCourseID,AmountDeferred,PaymentType, DateSubmitted, (select TransactionID from qryRegistrantCoursePayment where RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID) as TransactionID, (select PaymentID from qryRegistrantCoursePayment where RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID) as PaymentID from qryRegistrantCourseDetail where RegistrationStatus in ('D') and RegistrantID = " & sRegID & " and AmountDeferred > 0 order by DateSubmitted"
Set rs = objconn.execute(sSQL)
错误消息:
SQL Server的Microsoft OLE DB提供程序错误“80004005”
子查询返回了多个值。这是不允许的,因为
子查询后面是=,!=,=或者当子查询用作
表情
有人能帮我解决这个问题吗?我在写查询方面不是很有经验。提前谢谢
好的,查询已通过联接修复。。。但是现在asp出现了问题
Else
Response.Write "<table border=1 cellpadding=3 cellspacing=0>"
Response.write "<tr>"
Response.Write "<td>" & "<a href=""javascript:pick('','','','','','','','','')"">" & "None Selected" & "</a></td>"
Response.write "</tr>"
Do Until rs.eof
Response.Write "<tr>"
'Response.Write "<td>" & "<a href=""javascript:pick('" & trim(rs("BLDG_CD")) & "')'>" & trim(rs("AC_Title")) & "</a></td>"
Response.Write "<td>" & "<a href=""javascript:pick(" & quote(trim(rs("q.RegistrationID"))) & "," & quote(trim(rs("q.RegistrantCourseID"))) & "," & quote(trim(rs("q.CourseID"))) & "," & quote(trim(rs("q.CourseSectionID"))) & "," & quote(trim(rs("x.PaymentID"))) & "," & quote(trim(rs("q.AmountDeferred"))) & "," & quote(trim(rs("q.PaymentType"))) & "," & quote(formatdatetime(trim( rs("q.DateSubmitted") ),2)) & ",'" & trim("" & rs("x.TransactionID")) & "')"">" & formatcurrency(0 & rs("q.AmountDeferred"))& "</a></td>"
Response.Write "</tr>"
再次感谢您的帮助 根据错误消息,两个子查询选择TransactionID。。。或者选择PaymentID。。。是否返回多行,例如,您的数据模型允许每个注册人对每门课程进行多笔付款 尽管您可以通过引入带有TOP 1的子查询来解决此问题,但确定数据行为不符合预期的原因将是有益的: 此外,由于两个子查询作用于具有相同谓词的同一个表,因此您可以将子查询更改为派生表并连接到该派生表,而不是:
select
CourseID,
CourseSectionID,
RegistrationID,
RegistrantCourseID,
AmountDeferred,
PaymentType,
DateSubmitted,
x.TransactionID,
x.PaymentID
from qryRegistrantCourseDetail
cross apply
(select TOP 1 TransactionID, PaymentID
from qryRegistrantCoursePayment
where RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID
) AS x
where ...
order by DateSubmitted
如果解决了子查询返回多行的原因,则可以更改为简单联接:
inner join qryRegistrantCoursePayment as x
on x.RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID
谢谢你,斯图尔特。这是由于一些特殊情况,允许超过1条记录,特别是2条记录。如果我需要同时显示两条记录,则join是否有效?如果是,如何修改当前查询?是,如果直接使用联接,则它将返回两条记录。我更新了SqlFiddle,再次显示了双腿。这个查询似乎有问题,但现在asp出现了问题`再次谢谢你。这个查询似乎有问题,但现在asp出现了问题。我已经更新了上面的问题。。。请看一下只需删除别名q。和x。来自asp rsTransactionId等中的字段名。SQL中需要别名来解决歧义,但别名不是结果列名的一部分:-D
inner join qryRegistrantCoursePayment as x
on x.RegistrantCourseID = qryRegistrantCoursedetail.RegistrantCourseID