ホームページ >データベース >mysql チュートリアル >IN 句を使用して SQL クエリで欠落している ID のデフォルト値を返す方法

IN 句を使用して SQL クエリで欠落している ID のデフォルト値を返す方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-17 06:41:08805ブラウズ

How to Return Default Values for Missing IDs in an SQL Query Using IN Clause?

SQL IN 句クエリで欠落している ID のデフォルト値を取得する

この記事では、関連テーブルで ID が見つからない場合のデフォルト値を含む、指定された ID のデータの取得という、一般的な SQL クエリの課題に対処します。 このシナリオでは、IN 句を使用してユーザー ID でフィルターし、日付範囲内のユーザー アクティビティ データを取得します。 ただし、元のクエリでは、指定された期間内にアクティビティのないユーザーは除外されます。

この問題は、結合テーブル (LEFT JOIN) に適用される条件により、クエリの INNER JOINOnlineUseage のように動作することが原因で発生します。これにより、指定された日付範囲中に OnlineUseage に存在しない ID が効果的に除外されます。

解決策は、日付範囲条件を JOIN 句から WHERE 句に再配置することです。これにより、LEFT JOIN テーブルのすべての ID を含め、users が正しく機能するようになります。 OnlineUseage に一致するエントリがない ID にはデフォルト値が適用されます。

修正されたクエリは次のとおりです:

<code class="language-sql">SELECT
    users.Name,
    users.ID,
    IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM
    users
LEFT JOIN OnlineUseage ON users.ID = OnlineUseage.ID
WHERE users.ID IN (...)  -- Your ID list here
AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00';</code>

この改訂されたクエリにより、IN 句内のすべての ID が結果に含まれるようになります。 ID の日付範囲内の OnlineUseage に対応するエントリがない場合、IFNULL(SUM(users.Minutes), 0)MinutesOnline にデフォルト値 0 を提供します。 このアプローチは、指定された日付範囲の OnlineUseage テーブルに ID が存在するかどうかに関係なく、欠落している ID を効果的に処理し、必要なデフォルトの結果を返します。

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

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