ホームページ >データベース >mysql チュートリアル >サブクエリを使用せずに SQL の複数の行にわたる「AND」条件を効率的にシミュレートするにはどうすればよいですか?
ネストされたサブクエリを通じて複数の条件文を使用してデータをフィルタリングする従来の方法は、非効率的で複雑になる可能性があります特に大規模なデータセットを扱う場合にそうです。この記事では、サブクエリに頼らずに複数行の「AND」演算をシミュレートする別のアプローチを検討します。
「tagid」列と「contentid」列を持つ「tags」テーブルを考えてみましょう。各行は割り当てられたタグを表します。コンテンツ部分に。目標は、334、338、342 などの特定のタグ ID でタグ付けされたコンテンツの「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 ) )
ただし、この方法は、タグ ID の数が増えると拡張性が低くなります。この制限に対処するために、「GROUP BY」句と「HAVING」句を利用する最適化されたソリューションを紹介します。
SELECT contentID FROM tags WHERE tagID in (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3 --In general SELECT contentID FROM tags WHERE tagID in (...) --taglist GROUP BY contentID HAVING COUNT(DISTINCT tagID) = ... --tagcount
このクエリは、指定されたタグ ID を持つ行の「tags」テーブルを効率的にフィルタリングします。次に、結果を「contentid」でグループ化し、「HAVING」句を使用して、各「contentid」が、目的の数 (たとえば、この例では 3) に等しい個別のタグ ID 数を持つという条件を満たすことを確認します。
この手法を利用すると、複数の行に対して複雑な論理フィルタリング操作を効率的に実行できるため、従来のサブクエリ アプローチと比較して、よりスケーラブルでパフォーマンスの高いソリューションになります。
以上がサブクエリを使用せずに SQL の複数の行にわたる「AND」条件を効率的にシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。