2

有什么方法可以加入结果子字符串?

我有一个看起来像这样的查询:

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ältningsorgan och ämnesomsättning”(对应单元格在 中_atc_codes.se)。

在此处输入图像描述

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

4

1 回答 1

1

你能试试吗(这个例子使用MySQL 用户定义的变量,对于这个查询,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查询中添加一个以显示执行计划。祝你好运。

于 2013-09-14T11:41:15.493 回答