ホームページ >データベース >mysql チュートリアル >SQL結合で複数の行に条件を適用するにはどうすればよいですか?
SQL を使用した結合内の複数の行への条件の適用
結合を使用する場合、多くの場合、複数の行に特定の条件を適用することが必要になります。結合テーブル内。これは、個々の行のテストまたは行の集約を含むさまざまな手法を使用して実現できます。
EXISTS、サブクエリ、および結合を使用した個別の行のテスト
1A。 EXISTS:
このメソッドを使用すると、特定の条件を満たす行の存在を確認できます。
SELECT * FROM users WHERE EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name = 'tag1') AND EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name = 'tag2');
1B。サブクエリ:
サブクエリを使用して、結合テーブルの条件に基づいて行を選択することもできます。
SELECT * FROM users WHERE id IN (SELECT user_id FROM tags WHERE name = 'tag1') AND id IN (SELECT user_id FROM tags WHERE name = 'tag2');
1C。 JOIN:
INNER JOIN を使用して、複数の行の条件をテストできます。ただし、この方法のスケーラビリティは他の方法に比べて低くなります。
SELECT u.* FROM users u INNER JOIN tags t1 ON u.id = t1.user_id INNER JOIN tags t2 ON u.id = t2.user_id WHERE t1.name = 'tag1' AND t2.name = 'tag2';
COUNT と文字列処理を使用した行の集計
2A。 COUNTs:
この手法は、カウントによる行の集計に依存します。同一ユーザーに対してタグを複数回適用できない場合に有効です。
SELECT users.id, users.user_name FROM users INNER JOIN tags ON users.id = tags.user_id WHERE tags.name IN ('tag1', 'tag2') GROUP BY users.id, users.user_name HAVING COUNT(*) = 2;
2B.文字列処理:
GROUP_CONCAT や FIND_IN_SET などの文字列処理拡張機能を提供するデータベースの場合、文字列処理を使用して複数のタグをチェックできます。ただし、この方法は非効率的な場合があります。
SELECT user.id, users.user_name, GROUP_CONCAT(tags.name) AS all_tags FROM users INNER JOIN tags ON users.id = tags.user_id GROUP BY users.id, users.user_name HAVING FIND_IN_SET('tag1', all_tags) > 0 AND FIND_IN_SET('tag2', all_tags) > 0;
以上がSQL結合で複数の行に条件を適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。