2013-09-14 2 views
2

Есть ли способ присоединиться к результирующей подстроке?Выберите JOINed подстроку

У меня есть запрос, который выглядит следующим образом:

SELECT _atc_codes.se, _atc_codes.code, SUBSTR(_atc_codes.code, 1, 1) 
FROM diagnoses 
JOIN _atc_codes 
ON (_atc_codes.id = diagnoses.atc_code) 

Теперь я хочу, чтобы добавить дополнительный столбец этого запроса, который должен быть SUBSTR(_atc_codes.code, 1, 1) присоединился к соответствующему _atc_codes.se, как я могу это сделать?

Это изображение покажет неправильные результаты, четвертая колонка должна читать "Matsmältningsorgan och ämnesomsättning" (соответствующая ячейка в _atc_codes.se).

http://i41.tinypic.com/zkmxok.png

SQL Fidde: http://www.sqlfiddle.com/#!2/6695d

+0

Вы хотите добавить с существующим соединением или создать другой столбец запроса с подстрокой из значения другого столбца? –

+0

Я хочу добавить столбец в исходный запрос SELECT. – silkfire

+0

Не могли бы вы заменить изображения простым текстом? Крошечный шрифт трудно читать и невозможно скопировать и вставить в sqlfiddle. Еще лучше сделайте свой собственный sqlfiddle с образцами данных. – Barmar

ответ

1

Вы можете попробовать (в этом примере используется MySQL user defined variables важно для этого запроса, MySQL знает использовать значение вне из подзапроса для СРАВНЕНИЕ)

SELECT _atc_codes.se, _atc_codes.code, 
@code_substr:=SUBSTR(_atc_codes.code, 1, 1) AS code_substr, 
(
    SELECT se 
    FROM _atc_codes 
    WHERE [email protected]_substr 
    LIMIT 1 
) AS code_substr_se 
FROM diagnoses 
JOIN _atc_codes ON _atc_codes.id = diagnoses.atc_code 

Или (в этом примере присваивается псевдоним таблицы внешней таблице, который используется в подзапросе, поскольку вы используете таблицу дважды, а MySQL не знает, какую таблицу ссылаться в SUBSTR в подзапрос):

SELECT outer_codes .se, outer_codes .code, 
SUBSTR(outer_codes .code, 1, 1) AS code_substr, 
(
    SELECT se 
    FROM _atc_codes 
    WHERE code=SUBSTR(outer_codes.code, 1, 1) 
    LIMIT 1 
) AS code_substr_se 
FROM diagnoses 
JOIN _atc_codes AS outer_codes ON outer_codes.id = diagnoses.atc_code 

Третий способ будет добавление второго JOIN, а затем группа ResultSet как

SELECT _atc_codes_1st.se, _atc_codes_1st.code, 
SUBSTR(_atc_codes_1st.code, 1, 1) AS code_substr, 
MAX(_atc_codes_2nd.se) AS code_substr_se 
FROM diagnoses 
JOIN _atc_codes AS _atc_codes_1st ON _atc_codes_1st.id = diagnoses.atc_code 
JOIN _atc_codes AS _atc_codes_2nd ON _atc_codes_2nd.code = SUBSTR(_atc_codes_1st.code, 1, 1) 
GROUP BY _atc_codes_1st.se, _atc_codes_1st.code,code_substr 

Принятие решения, какой вариант использовать, было бы лучше, чтобы добавить EXPLAIN к вашему запрос, чтобы показать план выполнения. Удачи.

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