【问题标题】:Having issue on subquery that return more than 1 value [duplicate]在返回超过 1 个值的子查询上遇到问题 [重复]
【发布时间】:2017-05-26 07:46:12
【问题描述】:

我已经在寻找整体了。只是需要一个眼睛敏锐的人来帮忙。谢谢。

    SELECT (Select contactid from [tableA].[dbo].tableC where Company =  '" & company & "' AND empid = vProfile2.EmpNo) as contactid,vprofile2.EmpNo EmpNo, vprofile2.EmpName EmpName, upper(vprofile2.CompanyCode) CompanyCode, upper(vprofile2.DeptName) DeptName, Upper(vprofile2.JobTitle) JobTitle " & _
",Email_add Email,(Select Contact from [tableA].[dbo].tableC where Company =  '" & company & "' AND empid = vProfile2.EmpNo) as contact, " & _
"(Select Speeddial from [tableA].[dbo].tableC where Company =  '" & company & "' AND empid = vProfile2.EmpNo) as Speeddial " & _
"FROM [tableA].[dbo].tableC  RIGHT JOIN server.tableB.[dbo].[tableD] vprofile2 ON vProfile2.EmpNo = tableC.empid " & _
" AND tableC.company=vProfile2.CompanyCode " & _
"Inner JOIN server.tableB.[dbo].[tbEmail] vEmail ON vProfile2.EmpNo= vEmail.Emp_No " & _
  "WHERE(vprofile2.EmpNo Is Not null) And " & _
"vProfile2.CompanyCode = '" & company & "' " & _
 "ORDER by EmpName "

我收到一个错误,我试图找出发生了什么。

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

  • 首先要了解Sql注入和参数化查询。然后,一旦你的代码是安全的,你就可以开始处理子查询问题了。
  • 我们不知道您的表结构、当前数据、预期结果等。我完全不确定您为什么要使用子查询——这不是一种明显的方式来构建您的查询当tableC 已经在FROM 子句中并且(由于连接条件)被限制为具有等于companyCompany 值时。另外,回应 Zohar 的评论,您需要使用参数。
  • 向我们展示处理后的查询,该代码很难阅读。

标签: javascript sql vb.net


【解决方案1】:

这意味着您使用了子查询来返回字段的值,并且该子查询每行可以返回多条记录:

(Select Speeddial from [tableA].[dbo].tableC where Company =  '" & company & "' AND empid = vProfile2.EmpNo) as Speeddial 

您确定这个 where 子句只会为主查询中的每条记录返回一个(或零个)结果吗?

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2013-05-23
    相关资源
    最近更新 更多