1

名前とコードの 2 つのテーブルがあります。すべての名前を含むテーブルを作成し、既存の各コードを名前に一致させようとしています。一部の名前にはコードがないため、これらの名前は 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

これを実行しようとすると、Error Code: 1242 Subquery returns more than 1 row が表示されます

前もって感謝します

4

2 に答える 2

4

相関サブクエリで複数の行を返すことはできません。できることの 1 つは、相関サブクエリの代わりに 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;

これは、テーブルに存在しない行に対して null を返します。insure_prod.companyclassification一致する行が複数ある場合は、それぞれに対して複数の行を返しますname。それぞれに対して複数の行を返したくない場合はname、クエリを変更して、codeそれぞれに対して1 つの行を返す必要がありますname

相関サブクエリを引き続き使用する場合は、クエリを変更して、名前ごとに結果を 1 行に制限する必要があります。

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 に答える