序文今日、プログラムを開発しているときに、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 プロジェクトにおけるトランジション コンポーネントの適用の概要
vue3コンポーネントの通信モードは次のとおりです。小道具$放出$expose / 参照$属性vモデ...
序文ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5...
MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...
序文: 最近の医療モバイル プロジェクトに基づいて、Vue はさまざまな画面のさまざまな画面サイズに...
目次1. ストアドプロシージャ1.1. 基本構文1.2 実行権限を指定してストアドプロシージャを作成...
ボタンをクリックしてテキストを入力ボックスに変換し、保存をクリックしてテキスト実装コードに変換します...
WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...
この記事の例では、vue検証コードコンポーネントで使用される具体的な実装コードを参考までに共有してい...
序文hover疑似クラスが要素に境界線を追加すると、要素内のコンテンツがずれることがあります。box...
1. pc-reset PCスタイルの初期化 /* 正規化.css */ html{ 行の高さ: 1...
MySQL sql_modeの適切な設定sql_mode は見落とされやすい変数です。デフォルト値は...
適用シナリオ: シールのさまざまな状態に応じて、さまざまな状態のシールの数をカウントする必要がありま...
<br />Web テーブルの分割線を削除する方法。実際、上記の 3 つの表はいずれも ...
プロジェクトシナリオ:ページ表示には <ul> タグがあります。リストデータを動的に表示...
実はこれもクリックベイトのタイトルであり、「派手」とは言えません。ただ私が無知で、こうしたラベルを見...