ホームページ > データベース > mysql チュートリアル > SQL 結合を使用して複数のタグを持つユーザーを選択するには?

SQL 結合を使用して複数のタグを持つユーザーを選択するには?

DDD
リリース: 2024-12-20 05:41:14
オリジナル
218 人が閲覧しました

How to Select Users with Multiple Tags Using SQL Joins?

結合内の複数の行に SQL 条件を実装する方法

提示された問題は、結合からの 2 つの特定のタグを持つユーザーの選択を中心に展開します手術。 IN を使用して提供された例では、いずれかのタグを持つユーザーが返されますが、望ましい結果は両方のタグを持つユーザーを取得することです。これを達成するには、ALL キーワードを利用することは不適切です。

解決策

1.異なる行のテスト

  • 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')
ログイン後にコピー
  • サブクエリ: 複数の条件に一致するユーザーを選択しますrows.
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') 
ログイン後にコピー
  • JOINs: タグ条件ごとに複数の結合を作成します。
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'
ログイン後にコピー

2.行の集計

  • 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
ログイン後にコピー
  • 文字列処理(データベース固有): タグ名を連結し、データベース固有の関数を使用して特定のタグの存在を確認します。
(MySQL Specific)
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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート