ホームページ > データベース > mysql チュートリアル > SQL クエリで IN 値が欠落している場合にデフォルトの結果を返す方法

SQL クエリで IN 値が欠落している場合にデフォルトの結果を返す方法

Patricia Arquette
リリース: 2025-01-17 06:31:09
オリジナル
435 人が閲覧しました

How to Return Default Results for Missing IN Values in SQL Queries?

SQL クエリで欠落している IN 値を処理するためのデフォルトの結果

SQL では、一連の値に基づいて行をフィルタリングするために IN クエリが使用されます。ただし、動的クエリに使用する場合は、IN リスト内の一部の値がデータベース内に対応するレコードを持たない可能性がある状況に対処する必要がある場合があります。これにより、これらの値の行が空になり、後続の処理やデータ表示に影響します。

この問題を解決するには、LEFT JOIN を使用してクエリを書き直すことを検討してください。 (提供されたサンプル コードに示すように) 条件を WHERE 句から LEFT JOIN の ON 句に移動すると、IN リスト内のすべての値が結果セットに確実に含まれるようになります。これは、LEFT JOIN は、右側のテーブルに一致する行がない場合でも、左側のテーブルのすべての行を返すためです。

例:

次の簡略化されたクエリを考えてみましょう:

<code class="language-sql">SELECT Name, ID, SUM(Minutes) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
ログイン後にコピー

このクエリでは、条件 OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date が省略されています。完全を期すために、それを JOIN 条件に含める必要があります。

改善されたクエリは次のとおりです:

<code class="language-sql">SELECT Name, ID, IFNULL(SUM(Minutes), 0) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < CURRENT_TIMESTAMP
WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
ログイン後にコピー

OnlineUseage テーブルに対応するレコードがない IN リストの値に対して、LEFT JOIN は対応する列の NULL 値を返します。その後、IFNULL 関数を使用して、NULL 値をデフォルト値 (この場合は 0) に置き換えることができます。

このアプローチにより、IN リスト内のすべての値が結果セットに含まれることが保証され、指定された基準を満たさない値には適切なデフォルト値が割り当てられます。 CURRENT_TIMESTAMP は、クエリが正しく実行されるように、元のテキスト内のあいまいな <p>Now を置き換えるために使用されることに注意してください。

以上がSQL クエリで IN 値が欠落している場合にデフォルトの結果を返す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート