子查询无法正常运行并返回表达式错误

时间:2016-06-16 09:14:01

标签: sql subquery

我有一个返回值的简单子查询,但是我收到如下错误: “子查询返回的值超过1。当子查询跟随=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。”

子查询如下。

SELECT
manufacturing_tote.mft_tote_barcode
FROM dbo.manufacturing_tote
INNER JOIN dbo.works_order
ON manufacturing_tote.mft_wo_id = works_order.wo_id

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

这取决于子查询的使用方式。例如,如果它用于比较,则可能存在以下情况:

  • =替换为in
  • 在子查询之前使用ANYSOMEALL

更通用的解决方案是确保它只返回一行。有两种方法:

  • 例如,将select更改为聚合:select max(manufacturing_tote.mft_tote_barcode)
  • 将结果集限制为一行:select top 1 manufacturing_tote.mft_tote_barcode

答案 1 :(得分:0)

如果关系确实是1对多,并且您不希望重复结果添加DISTINCT关键字:

SELECT DISTINCT manufacturing_tote.mft_tote_barcode
FROM dbo.manufacturing_tote, dbo.works_order
WHERE manufacturing_tote.mft_wo_id = works_order.wo_id

当结果可以有多个不同的值时,您必须决定如何使用它:

  • 仅获取第一个结果
  • 使用IN代替'=',如前所述

答案 2 :(得分:0)

您的子查询返回的结果多于结果,因此您应该使用in子句

where yout_col  in   (SELECT
    manufacturing_tote.mft_tote_barcode
    FROM dbo.manufacturing_tote
    INNER JOIN dbo.works_order
    ON manufacturing_tote.mft_wo_id = works_order.wo_id)