ホームページ >データベース >mysql チュートリアル >SQL結合で複数の行に条件を適用するにはどうすればよいですか?

SQL結合で複数の行に条件を適用するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-24 03:01:23521ブラウズ

How to Apply Conditions to Multiple Rows in SQL Joins?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。