子查询返回多行MySQL

子查询返回多行MySQL,mysql,subquery,Mysql,Subquery,嘿,这里有两个表Name和Code,我试图用所有的名称创建一个表,并将每个现有的代码与名称匹配。有些名称没有代码,因此这些名称应显示为空。无论如何,这是我的代码: SELECT company.name, (SELECT companyclassification.code FROM insure_prod.companyclassification WHERE company.OIQ_ID = companyclassification.ussicClassification_StdCom

嘿,这里有两个表Name和Code,我试图用所有的名称创建一个表,并将每个现有的代码与名称匹配。有些名称没有代码,因此这些名称应显示为空。无论如何,这是我的代码:

SELECT company.name,

(SELECT companyclassification.code
FROM insure_prod.companyclassification
WHERE  company.OIQ_ID = companyclassification.ussicClassification_StdCompany)
AS USSIC_Code

FROM insure_prod.company
当我试着运行它时,它会显示错误代码:1242子查询返回超过1行


提前感谢

查询不能返回多行。您正在尝试将其结果返回到字段上下文中-字段在任何给定行中不能有多个值,并且您正在尝试填充2个或多个结果记录。

选择公司分类.code…查询不能返回多行。您正在尝试将其结果返回到字段上下文中-字段在任何给定行中不能有多个值,并且您正在尝试填充2个或多个结果记录。

相关子查询不能返回多行。您可以做的一件事是使用左连接而不是相关子查询:

SELECT c.name,
  cc.code AS USSIC_Code
FROM insure_prod.company c
LEFT JOIN insure_prod.companyclassification cc
  on c.OIQ_ID = cc.ussicClassification_StdCompany;
这将为
insure\u prod.companyclassification
表中不存在的行返回空值,如果有多行匹配,则将为每个
名称
返回多行。如果不希望为每个
名称
返回多行,则需要更改查询,为每个
名称
返回一个
代码

如果要继续使用相关子查询,则必须更改查询,将每个名称的结果限制为一行:

SELECT c.name,
  (SELECT cc.code
   FROM insure_prod.companyclassification cc
   WHERE  c.OIQ_ID = cc.ussicClassification_StdCompany
   ORDER BY cc.ussicClassification_StdCompany 
   LIMIT 1) AS USSIC_Code
FROM insure_prod.company c

相关子查询不能返回多行。您可以做的一件事是使用左连接而不是相关子查询:

SELECT c.name,
  cc.code AS USSIC_Code
FROM insure_prod.company c
LEFT JOIN insure_prod.companyclassification cc
  on c.OIQ_ID = cc.ussicClassification_StdCompany;
这将为
insure\u prod.companyclassification
表中不存在的行返回空值,如果有多行匹配,则将为每个
名称
返回多行。如果不希望为每个
名称
返回多行,则需要更改查询,为每个
名称
返回一个
代码

如果要继续使用相关子查询,则必须更改查询,将每个名称的结果限制为一行:

SELECT c.name,
  (SELECT cc.code
   FROM insure_prod.companyclassification cc
   WHERE  c.OIQ_ID = cc.ussicClassification_StdCompany
   ORDER BY cc.ussicClassification_StdCompany 
   LIMIT 1) AS USSIC_Code
FROM insure_prod.company c

确保子查询仅返回单行,或者改为将查询重写为普通联接查询。确保子查询仅返回单行,或者改为将查询重写为普通联接查询。