有没有办法在结果子字符串上加入?
我的查询看起来像这样:
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
答案 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
以显示执行计划。祝你好运。