|
-- SQLite |
|
WITH RECURSIVE |
|
-- 対象とするカードデータを抽出 |
|
-- セット(ExpansionCode,DigitalReleaseSet)などはここで指定する |
|
TargetCardData AS ( |
|
SELECT |
|
* |
|
FROM |
|
Cards |
|
WHERE |
|
isToken = 0 -- トークンでないカードを対象 |
|
AND IsPrimaryCard = 1 -- プライマリカードを対象(創出カードなどは除外) |
|
-- ↓の条件は必要に応じて変更 |
|
AND ExpansionCode = 'FIN' -- FINセットに対象 |
|
-- AND DigitalReleaseSet = 'Y25-TDM' -- アルケミー限定用の指定(例: タルキールアルケミー) |
|
), |
|
-- カンマ区切りにAbilityIdsを分割する(再帰処理が必要) |
|
AbilitySplit AS ( |
|
-- 初期データ: カンマで最初のペアを抽出 |
|
SELECT |
|
GrpId, |
|
substr (AbilityIds, 1, instr (AbilityIds || ',', ',') - 1) AS Pair, |
|
substr (AbilityIds, instr (AbilityIds || ',', ',') + 1) AS Remaining |
|
FROM |
|
TargetCardData |
|
UNION ALL |
|
-- 再帰処理: 残りのデータを処理 |
|
SELECT |
|
GrpId, |
|
substr (Remaining, 1, instr (Remaining || ',', ',') - 1) AS Pair, |
|
substr (Remaining, instr (Remaining || ',', ',') + 1) AS Remaining |
|
FROM |
|
AbilitySplit |
|
WHERE |
|
Remaining != '' |
|
), |
|
-- AbilitySplitをコロンで分割して AbilityId と AbilityLocalizationId を抽出 |
|
AbilityPairs AS ( |
|
SELECT |
|
GrpId, |
|
substr (Pair, 1, instr (Pair, ':') - 1) AS AbilityId, |
|
substr (Pair, instr (Pair, ':') + 1) AS AbilityLocalizationId |
|
FROM |
|
AbilitySplit |
|
), |
|
-- 必要なローカライズテーブルのカラムのみ抽出 |
|
TargetLocalizations_JP AS ( |
|
-- 必要な日本語のみ抽出 |
|
-- 基本はフォーマット1が見やすいので1を使用 |
|
-- ただし、カードタイトルに漢字が入る場合は送り仮名がない表記の3が用意されている |
|
-- その場合はみやすさ優先で3を使用するようなテーブルを用意する |
|
SELECT |
|
LocId, |
|
Loc |
|
FROM |
|
( |
|
-- フォーマットが1または3のものを抽出し、大きな数字のほうを優先する |
|
SELECT |
|
LocId, |
|
Loc, |
|
Formatted, |
|
ROW_NUMBER() OVER ( |
|
PARTITION BY |
|
LocId |
|
ORDER BY |
|
Formatted DESC |
|
) AS rn |
|
FROM |
|
Localizations_jaJP |
|
WHERE |
|
Formatted in (1, 3) -- 1は通常のフォーマット、3は漢字がある場合に送り仮名を省略したフォーマット(主にタイトル用) |
|
) |
|
WHERE |
|
rn = 1 |
|
) |
|
SELECT |
|
TargetCardData.GrpId, |
|
-- locTitle.enUS AS TitleName_enUS, -- タイトル名(英語) |
|
locTitle.Loc AS TitleName_jaJP, -- タイトル名(日本語) |
|
-- GROUP_CONCAT (locAbility.enUS, char(10)) AS AbilityNames_enUS, -- 能力(英語)を改行で結合 |
|
GROUP_CONCAT (locAbility.Loc, char(10)) AS AbilityNames_jaJP -- 能力(日本語)を改行で結合 |
|
FROM -- |
|
TargetCardData |
|
LEFT JOIN AbilityPairs ap ON TargetCardData.GrpId = ap.GrpId |
|
LEFT JOIN TargetLocalizations_JP locAbility ON ap.AbilityLocalizationId = locAbility.LocId |
|
LEFT JOIN TargetLocalizations_JP locTitle ON TargetCardData.TitleId = locTitle.LocId |
|
GROUP BY |
|
TargetCardData.GrpId, |
|
locTitle.Loc; |
|
|
|
-- ここで好みの条件のWHEREを追加して絞り込む(セミコロンの移動が忘れがち) |
|
-- WHERE |
|
-- locTitle.Loc LIKE '%なる絆%' |