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

または (この例では、テーブルを 2 回使用しており、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

3番目の方法は、2番目の結果セットを追加してから、次の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 に答える