MySQL ifnull のネスト使用手順

MySQL ifnull のネスト使用手順

MySQL ifnull のネストされた使用

ifnull をネストする方法があるかどうかオンラインで検索しましたが、この使用法について言及している人はいないようです。ほとんどの場合、フィールドが空かどうかをチェックし、別の値に置き換えるだけです。

つまり:

A から ifnull(a,b) を選択します。

しかし、私が遭遇した問題は、フィールドが 2 つあり、シナリオはおそらく次のようになることです。

各ストアには vip_discount と simple_discount という 2 つの割引方法があり、これらはデータベースにある割引フィールドにちなんで名付けられています。vip_discount がメインの割引方法です。

つまり、vip_discount が空でない場合は、その値が返されます。その値が空の場合は、さらに simple_discount フィールドが空であるかどうかを判断する必要があります。空でない場合は simple_discount の値が返され、空でない場合は空の文字列が返されます。

ここで、ネストされた ifnull を使用して目的を達成できるかどうかを判断できるかどうかを検討しました。

長い間インターネットを検索しましたが、同様のブログが見つからなかったので、自分で試してみようと思いました。

A から割引として ifnull(vip_discount,ifnull(simple_discount,"")) を選択します。

これで問題は解決します。この SQL ステートメントの後に条件ステートメントを続け、他の条件クエリを補足することもできます。

MYSQL ifnullの落とし穴

では、早速 SQL を見てみましょう。

アップデート
    lb_user u
u.user_level = を設定します (
    選択
        IFNULL(レベルID、u.user_level)
    lb_user_level から
    ここで、`status` = 1 かつ levelid > u.user_level
    かつ (アップグレードスコア < u.empirical または アップグレード合計金額 < u.total_consumption_money)
    レベルIDで並べ替え DESC
    制限 1
);

一見すると、この SQL 文は問題がなく、正常に実行されているように見えます。しかし、再度実行すると失敗します。その理由は、現在の条件に従ってデータを取得できず、返されたデータが空であるためです。データが空であるということは、データが存在しないということであり、データが存在するのではなく、フィールドが空であることに注意してください。調査後、SQL 文は次のように変更されます。

アップデート
    lb_user u
u.user_level = IFNULL(( を設定します
    選択
        レベルID
    lb_user_level から
    ここで、`status` = 1 かつ levelid > u.user_level
    かつ (アップグレードスコア < u.empirical または アップグレード合計金額 < u.total_consumption_money)
    レベルIDで並べ替え DESC
    制限 1
)、u.user_level);

変更後、実行は成功し、IFNULL エラーは発生しません。

理由をまとめると次のようになります。

MYSQL では、IFNULL はデータが存在して NULL であるかどうかのみを判別できますが、データが見つからず NULL であるかどうかは判別できません。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySql における無効な Null セグメント判定と IFNULL() 失敗の解決策
  • MySQL IFNULL判定問題の解決方法
  • MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ
  • MySQL で null を置き換える IFNULL() および COALESCE() 関数の詳細な説明
  • MySQL の nvl() 関数に似た ifnull() 関数についての簡単な説明
  • MySql での IFNULL、NULLIF、ISNULL の使用法の詳細な説明
  • SQL Server の ISNULL 関数と MySQL の IFNULL 関数の使用法について簡単に説明します。
  • MySQL の IFNULL、IF、CASE の違いの紹介

<<:  Vueのウェブページスクリーンショット機能の詳しい説明

>>:  ウェブページを作るときに知っておくべきいくつかのスキル

推薦する

Vue で Baidu Map を呼び出して経度と緯度を取得する

プロジェクトでは、現在地の緯度経度を取得したり、場所を検索して緯度経度情報を取得したりする必要があり...

MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)

目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...

Linux のタイムドログ削除を実装する簡単な方法

導入Linux は、ファイル、ログ、電子メール、バックアップなどを自動的に生成できるシステムです。ハ...

Tencent Cloud 上で Hadoop 3.x 疑似クラスターを構築する方法を説明します

1. 環境整備CentOS Linux リリース 7.5.1804 (コア)インストールフォルダを作...

CSS で左上の三角形を作成するいくつかの方法の詳細な説明

今日は、CSS を使用して左上の三角形を記述するいくつかの方法を紹介します。概略図(幅と高さを60p...

Nginx 構成の実装 https

目次1: https証明書を準備する2: nginx sslモジュールを準備する3: SSL証明書を...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...

MySQLオンラインDDLの使用に関する詳細な説明

目次文章LOCKパラメータアルゴリズムパラメータCOPY TABLE プロセスIN-PLACEプロセ...

美容・スタイリングウェブサイト向けのカラーマッチングテクニックと効果表示

色はあらゆるウェブサイトにとって最も重要な要素の 1 つであり、閲覧者に大きな影響を与えるため、色の...

Vue における v-for のキーの一意性の詳細な説明

目次1. DOM の違い2. 同じレイヤーの同じタイプの要素にキー属性を追加する3. キーはインデッ...

ウェブサイトがhttpsを有効にした後のSSLのセキュリティ構成と検出

最近のウェブサイトでは SSL を有効にするのが標準となっています。ただし、SSL を設定した後も、...

Visual Studio Codeを使用してMySqlデータベースに接続し、クエリを実行します。

Visual Studio Code は、Microsoft が開発した強力なテキスト エディター...

Flinkのフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン

目次1. ジョブ実行のフォールトトレランス1.1 タスクフェイルオーバー戦略1.2 ジョブ再開戦略2...

ウェブデザインとは何か

<br />元の記事: http://www.alistapart.com/articl...