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
Libérer: 2024-12-28 09:07:10
original
973 Les gens l'ont consulté

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')
Copier après la connexion

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')
Copier après la connexion

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'
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal