次の表を想像してください。
id | variant | name
-----------------------
1 | 1 | a
1 | 2 | b
1 | 3 | c
2 | 1 | d
2 | 2 | e
2 | 3 | NULL
3 | 1 | g
これを取得するには、どの SQL ステートメントを実行する必要がありますか。
- 指定された ID と指定されたバリアントについて、この組み合わせの名前を取得します。
- ただし、名前が NULL の場合は、指定された ID を持つがバリアント 1 を持つ行の名前を取得します (バリアント 1 の名前は NULL になることはありません)。
- 指定されたバリアントを持つ行がない場合は、同じ ID を持つバリアントが 1 の行を再度使用します。
- バリアント 1 が直接要求されることはありません。
これは、フォールバック メカニズムのようなものです。または、バリアント = 1 の行の値をオーバーライドすると考えることができます。
例:
- ID = 1、バリアント = 2: b
- ID = 1、バリアント = 3: c
- ID = 2、バリアント = 3: d
- ID = 3、バリアント = 5: g
これはSQLで可能ですか?また、その仕組みをもっと多くの分野に適用した場合、うまくいくのでしょうか?
ありがとう!
アップデート:
名前フィールドだけでなく、このメカニズムが欲しいことに注意してください。同じ動作を持つ列がさらにあるはずですが、各列は個別に処理する必要があります。