SQL错误== 1242(21000):子查询返回的行数超过1

时间:2020-05-02 13:04:07

标签: mysql sql

我开始学习SQL,并且由于Subquery返回多于1行而收到错误。 在此查询中,我试图创建一个包含在orders和customers表上均包含customer的表。 我在哪里做错了?

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

2 个答案:

答案 0 :(得分:1)

您只需做INNER JOIN

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

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

因此,这里的子查询将不起作用。改为使用INNER JOIN

答案 1 :(得分:0)

发表评论的时间有点长。

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

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

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

您的查询混淆了这些类型的子查询。您尚未指定要执行的操作,但是整个查询需要重新编写,大概使用JOIN