我有一个返回值的简单子查询,但是我收到如下错误: “子查询返回的值超过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
我该如何解决这个问题?
答案 0 :(得分:1)
这取决于子查询的使用方式。例如,如果它用于比较,则可能存在以下情况:
=
替换为in
ANY
,SOME
或ALL
更通用的解决方案是确保它只返回一行。有两种方法:
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
当结果可以有多个不同的值时,您必须决定如何使用它:
答案 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)