0

次の表を想像してください。

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で可能ですか?また、その仕組みをもっと多くの分野に適用した場合、うまくいくのでしょうか?

ありがとう!

アップデート:

名前フィールドだけでなく、このメカニズムが欲しいことに注意してください。同じ動作を持つ列がさらにあるはずですが、各列は個別に処理する必要があります。

4

2 に答える 2