ホームページ >データベース >mysql チュートリアル >一致する行が見つからない場合に SQL でデフォルト値を返す方法は?

一致する行が見つからない場合に SQL でデフォルト値を返す方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 18:54:301024ブラウズ

How to Return Default Values in SQL When No Matching Rows are Found?

単一行が見つからない場合に SQL でデフォルト値を返す

SQL クエリを使用してデータベースからデータを取得する場合、多くの場合、次のことが望ましいです。一致する行が見つからない場合はデフォルト値を返します。これは、クエリ出力がアプリケーションでの表示や処理を目的としている状況を扱う場合に特に便利です。

元のクエリ

次の SQL クエリを考えてみましょう。ストリームの次のスケジュールされたアイテムを取得します:

<code class="sql">SELECT `file`
FROM `show`, `schedule`
WHERE `channel` = 1
  AND `start_time` <= UNIX_TIMESTAMP()
  AND `start_time` > UNIX_TIMESTAMP()-1800
  AND `show`.`id` = `schedule`.`file`
ORDER BY `start_time`
DESC LIMIT 1</code>

このクエリは、指定された条件を満たす最新のスケジュールされたアイテムを返します。ただし、一致する行が見つからない場合 (つまり、過去 30 分以内にスケジュールされた項目がない場合)、空の結果が返されます。

デフォルト値が近づきます

このシナリオを処理し、一致する行が見つからない場合にデフォルト値を返すには、いくつかのアプローチを使用できます。

COALESCE/IFNULL with Aggregation

1 つの方法では、 COALESCE 関数または IFNULL 関数を集計関数と組み合わせて使用​​します。このアプローチにより、クエリ結果が空であっても、確実に null 以外の値が返されます。例:

<code class="sql">SELECT IFNULL(MIN(`file`), 'default.webm') `file`
  FROM `show`, `schedule`
 WHERE `channel` = 1
   AND `start_time` <= UNIX_TIMESTAMP()
   AND `start_time` > UNIX_TIMESTAMP()-1800
   AND `show`.`id` = `schedule`.`file`
 ORDER BY `start_time` DESC LIMIT 1</code>

このクエリでは、MIN() 集計関数を使用してファイル列の最小値を返します。これにより、行が選択されていない場合には NULL 値が返されます。次に、IFNULL または COALESCE 関数は、NULL 値をデフォルト値 'default.webm' に置き換えます。

このソリューションは、一致する行が見つからない場合にデフォルト値を効果的に返し、アプリケーションがスケジュールされたアイテムの不在を処理できるようにします。

以上が一致する行が見つからない場合に SQL でデフォルト値を返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。