Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 ASP:子查询返回了多个值_Sql_Database_Subquery - Fatal编程技术网

Sql 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

我有一个本地托管的网站,带有MS SQL Server数据库。我试图填充数据库中的记录列表,但查询返回错误

asp网页上的代码:

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