SQL での複数行の "AND" のシミュレーション
リレーショナル データベースの領域では、複数の基準に基づいてデータを効率的に取得することが重要です特に大規模なデータセットを扱う場合にそうです。次のシナリオを考えてみましょう。さまざまなコンテンツに割り当てられたタグを表す、「tagid」と「contentid」という 2 つの列を含む「tags」テーブルです。目的は、特定のタグ ID セット (例: 334、338、および 342) でタグ付けされたコンテンツの「contentid」を取得することです。
単純なアプローチには、ネストされたサブクエリが含まれ、効果的に次のように変換されます。
SELECT contentid FROM tags WHERE tagid = 334 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 338 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 342 ) )
このアプローチは機能しますが、多数の tagid にとっては煩雑で非効率的になります。幸いなことに、より効率的で拡張可能なソリューションが存在します。
セットベースの操作を使用すると、サブクエリの必要性を排除した単一のクエリを作成できます。
SELECT contentID FROM tags WHERE tagID IN (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
このクエリ
このソリューションは引き続き効率的ですネストされたサブクエリや再帰操作が含まれないため、タグIDが多数の場合でも同様です。時間計算量は関連するタグIDの数に対して線形のままであるため、大規模なデータセットやアドホッククエリに適しています。
以上がSQL の複数の行にわたる「AND」条件を効率的にシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。