选择JOINed substring

时间:2013-09-14 10:24:07

标签: mysql join

有没有办法在结果子字符串上加入?

我的查询看起来像这样:

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,我该怎么做?

此图像显示不正确的结果,第4列应显示为“Matsmältningsorganochhämnesomsättning”(_atc_codes.se中的相应单元格)。

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

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

1 个答案:

答案 0 :(得分: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 code=@code_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,然后将结果集分组为

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以显示执行计划。祝你好运。