Maison >base de données >tutoriel mysql >Comment appliquer des conditions sur plusieurs lignes lors de la jointure de tables en SQL ?

Comment appliquer des conditions sur plusieurs lignes lors de la jointure de tables en SQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-28 09:07:10883parcourir

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

Utilisation de SQL pour appliquer des conditions sur plusieurs lignes dans une jointure

Considérant votre demande initiale concernant l'application de conditions sur plusieurs lignes dans une jointure, développons les techniques disponibles.

Test de différentes lignes

1A. Utilisation d'EXISTE :

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. Utilisation de sous-requêtes :

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. Tirer parti des 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'

Agrégation des lignes

2A. Utilisation de 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. Utilisation du traitement de chaînes :

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

Remarque : cette approche utilise des extensions spécifiques à MySQL et est inefficace par rapport aux autres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn