【问题标题】:SQL ERROR == 1242 (21000): Subquery returns more than 1 rowSQL ERROR == 1242 (21000): 子查询返回多于 1 行
【发布时间】:2020-05-02 21:07:15
【问题描述】:

我开始学习 SQL,但由于子查询返回多于 1 行而收到错误消息。 在此查询中,我试图创建一个表,其中包括订单和客户表中的客户。 我哪里做错了?

 SELECT (SELECT DISTINCT customerNumber FROM orders),
        (SELECT customerName FROM customers WHERE customerNumber = (SELECT DISTINCT customerNumber FROM orders));

【问题讨论】:

  • 请提供样本数据、期望的结果以及您想要完成的任务的说明。另外,解释你不明白的地方。错误似乎很明显。

标签: mysql sql


【解决方案1】:

你简单做INNER JOIN:

SELECT DISTINCT o.customerNumber, c.customerName
FROM orders o INNER JOIN
     customers C
     ON C.customerNumber = o.customerNumber;

客户表包含多个与订单关联的客户,因此子查询将返回多条记录。

所以,这里的子查询不起作用。请改用INNER JOIN

【讨论】:

    【解决方案2】:

    评论有点长。

    SQL 中有不同类型的子查询。关键区别在于行数:

    • 返回多于一行(通常多于一列)的子查询是一个派生表
    • 一些子查询是特殊的。它们最多返回一行,通常返回一列。这些是标量子查询

    标量子查询可以在使用常量表达式的地方使用。例如,您可以在=select 中使用常量。但是,您不能在这些位置使用集合。

    您的查询混淆了这些类型的子查询。你还没有指定你想要做什么,但是整个查询需要重写,大概使用JOIN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2022-01-24
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多