首页 > 解决方案 > 如何从同一供应商处选择产品,获取此错误子查询返回多于 1 行

问题描述

我是这个查询世界的新成员。我尝试从表 [mod_productos] 中选择来自同一供应商 [vProveedor] 的产品列 [vProducto] 但我收到错误 [子查询返回超过 1 行]

我正在尝试使用此代码:

SELECT vProducto 
FROM mod_productos 
WHERE vProducto IN (
    SELECT vProducto 
    FROM mod_productos  
    WHERE vProveedor="Telefonica"
);

有关如何执行此操作的任何帮助?提前致谢...

标签: mysqlselect

解决方案


SELECT 
    vProducto 
FROM mod_productos 
WHERE 
    vProducto IN (
        SELECT vProducto FROM mod_productos WHERE vProveedor="Telefonica"
    );

上面的查询很好,您不应该在此处使用您的语法获得“子查询返回多行”异常。

当您遇到多行异常时,通常是使用 SELECT 子查询作为列的结果。

例如

SELECT
   pkMyProdID
   , ( SELECT field FROM OtherTable WHERE fkMyProdID = pkMyProdID ) AS SubQueryColumn
FROM myTable;

在此示例中,“SubQueryColumn”只能返回一行,否则最终会出现多行错误。

虽然我建议这样做(您期望不止一行吗?),但您可以通过将上面的示例修改为:

SELECT
   pkMyProdID
   , ( SELECT TOP 1 field FROM OtherTable WHERE fkMyProdID = pkMyProdID ) AS SubQueryColumn
FROM myTable;

请注意我添加到子查询中的“TOP 1”。这样可以确保只返回一行——但是——知道你的数据。如果您不期望超过一排但您收到了,请查看原因。


推荐阅读