序文今日、プログラムを開発しているときに、case when 構文を使用して MySQL からデータを抽出し、判断しました。使用中に、NULL 値の判断時に小さな問題が発生しました。 MySQL の when 文は Java の switch 文に似ており、より柔軟ですが、MySQL での Null の処理は少し特殊です。 Mysql の case when 構文:構文1: CASE ケース値 WHEN when_value THEN ステートメントリスト [WHEN when_value THEN statement_list] ... [ELSE ステートメントリスト] 終了ケース 構文2: 場合 WHEN 検索条件 THEN ステートメントリスト [WHEN 検索条件 THEN ステートメント リスト] ... [ELSE ステートメントリスト] 終了ケース 注: これら 2 つの構文には違いがあり、その違いは次のとおりです。 1: 最初の構文: case_value は、userid%2=1 や username is null などの式である必要があります。この構文は NULL のテストには使用できません。 2: 2 番目の構文 CASE には変数や式は必要ありません。直接実行すると、各 WHEN の後の条件が評価され、条件が満たされた場合に実行されます。 事例実践:テーブル構造は次のようになります: aの値はnull、bの値は1です mysql> SELECT NULL AS a, 1 AS b; +------+---+ | ア | ロ | +------+---+ | NULL | 1 | +------+---+ ここで、aの値がnullの場合はbの値を取得し、そうでない場合はaの値を取得するように実装します。 方法1: ifnullの使用 選択 IFNULL(a, b) 新規、 、 b から -- 一時テーブルを作成します。a の値は null、b の値は 1 です。 (NULL を a として、1 を b として選択) tmp; 方法2: 使用する場合 選択 ( 場合 aがNULLの場合 b それ以外 1つの 終わり ) 新品同様、 、 b から (NULL を a として、1 を b として選択) tmp; 結果が間違っていることがわかりました。new の値は、期待どおり 1 ではなく null でした。 このエラーはなぜ発生するのでしょうか?これは、最初の構文と 2 番目の構文が混在していることが原因です。case 後の Commission_pct には、実数値または null の 2 つの値があり、commission_pct が null の場合も true または false の 2 つの値があります。したがって、case 後の値が null の場合、true または false と一致することはなく、出力は null ではありません。 この場合に構文 1 を使用する必要がある場合は、次のように書き直すことができます。 選択 ( ケースaはNULLです TRUEの場合、b それ以外 終わり ) 新品同様、 、 b から (NULL を a として、1 を b として選択) tmp; 構文 2 を使用して次のように記述することもできます。 選択 ( 場合 aがNULLの場合、b それ以外 終わり ) 新品同様、 、 b から (NULL を a として、1 を b として選択) tmp; エラーが存在する可能性があるが、見つけるのが容易ではない別のケースに注意してください。 選択 ( 場合 NULLの場合はb それ以外 終わり ) 新品同様、 、 b から (NULL を a として、1 を b として選択) tmp; 問題ないように見えますが、実は問題があります。問題の原因は、= を使って null を判定できないことです。簡単に言うと、構文 1 の case 式の値は = を使用した場合に後続の値と比較されますが、MySQL では is または is not を使用する必要があります。 要約:1: 構文 1 は、case の後の式の値を計算し、次に「=」を使用して when 条件の値が等しいかどうかを判断します。等しい場合は、分岐に入ります。 2: 構文 2 では、case の後に式は必要ありません。when の後に条件値を直接評価できます。true の場合は、入力します。 これで、MySQL で NULL 値を判断する場合に関するこの記事は終了です。MySQL で NULL 値を判断する場合に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Vue プロジェクトにおけるトランジション コンポーネントの適用の概要
最も一般的な方法は、フィールドに主キーまたは一意のインデックスを設定することです。重複データを挿入す...
最近、業務上の理由により、Web ページ上のさまざまなネットワーク カメラにアクセスしてデバッグする...
1. ポート2375を開くdocker.serviceを編集する vim /lib/systemd/...
Nginx のインストールCentOS 6.x yum にはデフォルトで nginx ソフトウェア ...
概要(公式にはより詳しい説明があります) Firewalld は、ネットワーク接続またはインターフェ...
今日、VMware を使用してマシンに新しい仮想マシンをインストールしていたところ、次のように「この...
多くの組織ではファイル サーバーをバックアップする必要があり、あるサーバーから別のファイル サーバー...
この記事では主に、次のように共有されるネイティブ JS 音楽プレーヤーのサンプル コードを紹介します...
React は、開発者が Web およびモバイルベースのアプリケーションを作成するために使用するオ...
MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるロ...
目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...
クリックして画像を切り替えることは、日常生活で非常によく行われることです。今日の練習は、画像を切り替...
プログラム的アプローチの利点1. スタイルの分散を避けるためのグローバルコントロール2. シンプルな...
序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...
ウェブサイトの開発とメンテナンスのコストが削減されるだけでなく、コードもよりセマンティックになります...