試してみませんか (この例では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
、クエリに を追加して実行プランを表示するのが最適です。幸運を。