ホームページ >データベース >mysql チュートリアル >SQL で複数の行条件の共通部分を効率的に見つけるにはどうすればよいですか?
SQL での複数の行にわたる「AND」交差の解決
データベースにクエリを実行して、複数の条件に基づいてデータを取得することは一般的なタスクです。ただし、条件を複数の行に適用する必要がある場合、アプローチが複雑になる可能性があります。この記事では、サブクエリの必要性を排除し、そのようなシナリオに対するより効率的なソリューションを紹介します。
列「tagid」と「contentid」を持つ「tags」テーブルを考えてみましょう。タグ ID 334、338、および 342 でタグ付けされたすべてのコンテンツの「contentid」を見つけるには、従来のアプローチではネストされたサブクエリが必要です。ただし、条件の数が増えると、この方法の効率は低下します。
最適化されたアプローチではサブクエリが回避され、クエリのパフォーマンスがより速く、より拡張可能になります。修正されたクエリは次のとおりです。
SELECT contentID FROM tags WHERE tagID in (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
このクエリは、tagid のリストで「IN」演算子を利用して交差を実現します。 「GROUP BY」句は結果を「contentID」でグループ化し、「HAVING」句は指定されたすべてのタグIDを持つコンテンツのみを含むように結果をフィルタリングします。
一般に、このパターンは検索するために拡張できます。任意の数のタグの交差:
SELECT contentID FROM tags WHERE tagID in (...) --taglist GROUP BY contentID HAVING COUNT(DISTINCT tagID) = ... --tagcount
「taglist」と「tagcount」プレースホルダーを目的の値に置き換えることにより、このクエリは効率的にタグを見つけることができます。交差基準を満たすコンテンツ。
以上がSQL で複数の行条件の共通部分を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。