sql - 子查询返回多个值,不允许出现错误
问题描述
我正在尝试将数据从一个表插入到记录与外键匹配的另一个表中。我正在使用 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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
解决此问题的最佳方法是什么?
解决方案
一种方法使用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)
这通常具有更好的性能,尤其是使用正确的索引。
推荐阅读
- java - 无法将值传递给 PreparedStatement - 跳过最后的第五个参数
- zebra-printers - 斑马打印机不打印拉丁字符
- sql - 处理源表中的重复项
- networking - DHCP 如何为网络分配唯一地址以及是否需要更改 DNS 查找
- php - 如何在codeigniter中显示/显示图像?
- elasticsearch - ElasticSearch 集群设计帮助 - 数据节点
- python - Pandas minute-data find-从现在到第一次出现(阈值)条件之间的第一个本地最小值
- postgresql - PostgreSQL 10 函数创建不起作用
- javascript - 将对象的键值对添加到另一个对象中
- arrays - 在数组聚合MongoDB中设置索引范围