1

嘿,所以有这两个表名称和代码,我正在尝试制作一个包含所有名称的表,并将每个现有代码与名称匹配。某些名称没有代码,因此对于那些名称应显示为 NULL。无论如何,这是我的代码:

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 行

提前致谢

4

2 回答 2

4

您不能让相关子查询返回多于一行。您可以做的一件事是使用 LEFT JOIN 而不是相关子查询:

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_prod.companyclassification如果您有多个匹配的行,您将为每个返回多行name。如果您不想为每个返回多行name,那么您将需要更改查询code以为每个返回一个name

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

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
于 2013-07-04T20:00:07.663 回答
0

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

于 2013-07-04T19:58:46.500 回答