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

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

Barbara Streisand
リリース: 2024-12-28 09:07:10
オリジナル
862 人が閲覧しました

How to Enforce Conditions Across Multiple Rows When Joining Tables in SQL?

SQL を使用して結合内の複数の行に条件を適用する

結合内の複数の行に条件を適用することに関する最初の問い合わせを考慮して、利用可能な手法について詳しく説明します。

別のテスト行

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 の利用:

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'
ログイン後にコピー

行の集約

2A。 COUNT を使用しています:

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。文字列処理の採用:

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
ログイン後にコピー

注: このアプローチは MySQL 固有の拡張機能を利用しており、他のアプローチと比較すると非効率です。

以上がSQL でテーブルを結合するときに複数の行に条件を適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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