ホームページ >データベース >mysql チュートリアル >IN 句を使用して SQL クエリで欠落している ID のデフォルト値を返す方法
SQL IN 句クエリで欠落している ID のデフォルト値を取得する
この記事では、関連テーブルで ID が見つからない場合のデフォルト値を含む、指定された ID のデータの取得という、一般的な SQL クエリの課題に対処します。 このシナリオでは、IN
句を使用してユーザー ID でフィルターし、日付範囲内のユーザー アクティビティ データを取得します。 ただし、元のクエリでは、指定された期間内にアクティビティのないユーザーは除外されます。
この問題は、結合テーブル (LEFT JOIN
) に適用される条件により、クエリの INNER JOIN
が OnlineUseage
のように動作することが原因で発生します。これにより、指定された日付範囲中に 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 サイトの他の関連記事を参照してください。