Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir toutes les entrées du tableau B qui ont une relation avec plusieurs entrées (liste donnée) du tableau A

Si vous cherchez à sélectionner en fonction d'une liste d'As (et non de TOUS), faites-le comme ceci :

SELECT b_id
FROM ab
WHERE a_id IN (1,2)
GROUP BY b_id
HAVING COUNT(a_id) = 2

Remplacer (1,2) avec votre liste et 2 dans la clause having avec le nombre d'éléments de la liste.

Si vous obtenez votre liste d'As à partir d'une sous-requête, vous pouvez le faire comme ça (pas dans MySQL, cependant...) :

WITH subquery (
 --subquery code here
)

SELECT b_id
FROM ab
WHERE a_id IN subquery
GROUP BY b_id
HAVING COUNT(a_id) = (SELECT COUNT(*) FROM subquery)

Dans MySQL, vous auriez à mettre votre code de sous-requête deux fois et à supprimer la clause WITH.

Vous pouvez également utiliser une table temporaire, ce qui conduirait alors à sélectionner ALL As à partir de cette table temporaire et donc la réponse de Gordon Linoff...