2015-05-31 2 views
1

У меня есть хранимая процедура MySQL, которая возвращает несколько строк. Есть ли способ использовать этот результат в Inner Join с другой таблицей? Я пробовал:MySQL - Использование результата хранимой процедуры во внутреннем соединении

SELECT ErrorMessage FROM ErrorMessage em 
INNER JOIN User_Language(pCompanyID, pUserID) l ON em.Language=l.LanguageID 
WHERE ErrorCode = pErrorCode 
ORDER BY l.LanguageOrder LIMIT 1; 

В этом примере User_Language это хранимая процедура, которая возвращает список языков в порядке предпочтения. Цель состоит в том, чтобы вернуть сообщение об ошибке на предпочтительный язык пользователя.

+0

Я не знаю, что MYSQL может вернуться и использовать таблицу. Я сыграл трюки, возвращающие строку (например, «английский, испанский») и делая соединение с чем-то вроде: –

+0

Я не знаю, что MYSQL может вернуть и использовать таблицу. Я сыграл трюки, возвращающие строку (например, «, английский, испанский»), и присоединяюсь к чему-то вроде: JOIN ErrorMesage em ON User_Language (pCompanyID, pUserID) LIKE CONCAT ('%,', em.Language, ',%') Мне нужно будет подумать о том, как упорядочить результаты. Просто мысль. –

ответ

3

Я нашел жизнеспособное решение. Внутри хранимого proc User_Language я создаю таблицу Temp (называемую UserLanguages), которую затем я могу использовать во внутреннем соединении.

CALL User_Language(pCompanyID, pUserID); 
SELECT ErrorMessage INTO vErrorMessage FROM ErrorMessage em 
INNER JOIN UserLanguages l ON em.Language=l.LanguageID 
WHERE ErrorCode = pErrorCode 
ORDER BY l.LanguageOrder LIMIT 1; 
Смежные вопросы