首页 > 解决方案 > 子查询返回多个值,不允许出现错误

问题描述

我正在尝试将数据从一个表插入到记录与外键匹配的另一个表中。我正在使用 SSMS。这是我的代码:

INSERT INTO competitor_info (p21_part_number)
    SELECT inv_mast.item_id
    FROM inv_mast 
    WHERE inv_mast.upc_code = 
            (SELECT item_info.UPC
            FROM item_info)

我收到以下错误:子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

解决此问题的最佳方法是什么?

标签: sqlsql-server

解决方案


一种方法使用IN

WHERE inv_mast.upc_code IN 
        (SELECT item_info.UPC
        FROM item_info)

我更喜欢EXISTS

WHERE EXISTS (SELECT 1 FROM item_info.UPC WHERE UPC.item_info = inv_mast.upc_code)

这通常具有更好的性能,尤其是使用正确的索引。


推荐阅读