2013-07-04 3 views
1

Эй, вот эти две таблицы Name и Code, и я пытаюсь создать таблицу со всеми Именами и сопоставить каждый существующий код с именами. Некоторые имена не имеют кодов, поэтому для них они должны отображаться как NULL. В любом случае это мой код:Подзапрос возвращает более 1 строки MySQL

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 строку

Заранее спасибо

ответ

3

Вы не можете иметь коррелированный подзапрос, возвращающий более одной строки. Одна вещь, которую вы можете сделать, это использовать 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 
0

select companyclassication.code ... запрос не может возвращать более одного ряд. Вы пытаетесь вернуть свои результаты в контекст поля - поле не может иметь более одного значения в любой заданной строке, и вы пытаетесь заполнить 2 или более записей результатов.

+0

Так что я должен сделать, чтобы решить эту проблему? –

+0

убедитесь, что подзапрос возвращает только одну строку или вместо этого переписывает запрос как обычный объединенный запрос. –

Смежные вопросы