MySQL での NULL フィールドの処理
MySQL データベースからデータを取得する場合、一部のフィールドに NULL 値が含まれる可能性があることがよくあります。これは、数値データを必要とする計算や操作を実行する必要がある場合に問題を引き起こす可能性があります。
問題: 計算における NULL フィールド
次の SQL クエリを考えてみましょう。
SELECT uo.order_id, uo.order_total, uo.order_status, (SELECT SUM(uop.price * uop.qty) FROM uc_order_products uop WHERE uo.order_id = uop.order_id ) AS products_subtotal, (SELECT SUM(upr.amount) FROM uc_payment_receipts upr WHERE uo.order_id = upr.order_id ) AS payment_received, (SELECT SUM(uoli.amount) FROM uc_order_line_items uoli WHERE uo.order_id = uoli.order_id ) AS line_item_subtotal FROM uc_orders uo WHERE uo.order_status NOT IN ("future", "canceled") AND uo.uid = 4172;
このクエリは、複数のテーブルからデータを取得し、いくつかの小計を計算します。ただし、小計のいずれかに NULL 値が含まれる場合、計算全体が影響を受け、不正確な結果が生じる可能性があります。
解決策: IFNULL() 関数
MySQL NULL 値を処理する IFNULL() 関数を提供します。この関数は、評価する式と、式が NULL の場合に返す値の 2 つの引数を取ります。たとえば、次のクエリは IFNULL() を使用して、小計が NULL の場合に常にゼロに設定されるようにします。
SELECT uo.order_id, uo.order_total, uo.order_status, IFNULL((SELECT SUM(uop.price * uop.qty) FROM uc_order_products uop WHERE uo.order_id = uop.order_id), 0) AS products_subtotal, IFNULL((SELECT SUM(upr.amount) FROM uc_payment_receipts upr WHERE uo.order_id = upr.order_id), 0) AS payment_received, IFNULL((SELECT SUM(uoli.amount) FROM uc_order_line_items uoli WHERE uo.order_id = uoli.order_id), 0) AS line_item_subtotal FROM uc_orders uo WHERE uo.order_status NOT IN ("future", "canceled") AND uo.uid = 4172;
IFNULL() を使用すると、すべての小計が有効であることを確認できます。対応するテーブルに NULL データが含まれている場合でも、数値。これにより、計算を実行して正確な結果を得ることができます。
以上がMySQL 計算で NULL フィールドを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。