そのタイトルは残忍ですが、他になんと言っていいのかわかりません。
サイト全体でユーザー設定を保存する user_id に関連付けられたキー値テーブルがあります。ユーザーがログインして設定を更新していない場合は、キーを要求するたびに (「FAVORITE_COLOR」など) キーが null になるため、デフォルト ユーザーに関連付けたデフォルト設定を取得する必要があります。ユーザー ID = 0。
user_id = 0 の結果をクエリの最後に UNION するという行に沿って考えていましたが、それは重複につながるだけです。それが可能かどうかはわかりませんが、次のようなことを言えたらいいのにと思います。
SELECT val FROM k_v WHERE user_id = 123 AND k = 'FAVORITE_COLOR'
UNION IF val IS NULL
SELECT val FROM k_v WHERE user_id = 0 AND k = 'FAVORITE_COLOR';
これを行う良い方法はありますか?
編集:これに関するすべての助けに感謝します。ユースケースがこの質問である単一の値のみを取得する場合、デュアルからの NVL はまさにあなたが望むものですが、同じクエリで複数のペアを返すことを計画している場合は、他のいくつかを見てください実際には実装にとってより意味があるかもしれないので、答えてください。
以下の ZeissS の提案は単純で、まだ 1 つのクエリであり、複数の k,v ペアで動作し、クライアント側で重複フィルタリングの可能性がある場合でも問題はありません。