avec mes tables ci-dessus comment puis-je renvoyer le Je cherche des utilisateurs qui sont dans des entreprises code> type_id code> = 34 et 35 non ni. Si ce n'est pas en 34 mais en 35, les utilisateurs de cette entreprise ne doivent pas être retournés. P> user_id code> (S) qui appartiennent à des entreprises uniquement dans type_id code> = 34 et 35 et n'appartenant pas à type_id code> = 8. Donc, depuis comp_id code> = 3 ISNT in type_id code> = 8 et est dans type_id code> = 34 et 35 donc user_id code> = 104 et 105 strong> p>
3 Réponses :
Vous pouvez utiliser l'agrégation conditionnelle pour obtenir le comp_id code> S répondant à vos conditions et avec l'opérateur dans code> obtenez le user_id code> S: select user_id
from Table_2
where comp_id in (
select comp_id
from Table_1
group by comp_id
having sum(type_id = 8) = 0
and sum(type_id in (34, 35)) = 2
)
Ceci est un moyen simple et lisible de le faire.
SELECT DISTINCT Table_2.user_id
FROM Table_2
INNER JOIN
(SELECT DISTINCT comp_id
FROM Table_1
WHERE type_id IN (34, 35)
) type_include ON Table_2.type_id = type_include.type_id
LEFT JOIN
(SELECT DISTINCT comp_id
FROM Table_1
WHERE type_id IN (8)
) type_exclude ON Table_2.type_id = type_exclude.type_id
AND type_exclude.type_id IS NULL
MySQL ne supporte pas moins.
Vous pouvez faire une telle chose avec une sous-requête, dans laquelle vous spécifiez la condition qui ne doit pas être remplie ps: pour les données de votre exemple, vous ne seriez même pas à Vérifiez que l'ID soit égal à 35 ou 34 car il n'y a aucune autre valeur dans vos données de toute façon. P> SELECT DISTINCT t2.user_id
FROM Table_2 t2
WHERE t2.comp_id NOT IN (SELECT comp_id FROM Table_1 WHERE type_id = 8)
;
J'utilise la 2e solution. Je cherche 34 "et" 35 non ni 34 ou 35. Oui, il existe d'autres types_ids autres que 8, 34 et 35. Il est correct si le corp_id est dans ces types. Je ne les veux tout simplement pas dans Type_id 8 du tout.
La réponse que vous avez acceptée reviendra également user_ids qui ne sont que type_id = 34 ou uniquement type_id = 35. Dans votre question, vous avez mentionné deux fois 34 et b> 35.
@forpas: Vous avez peut-être raison, je pense que la question n'est pas entièrement claire là-bas. Depuis que l'OP dit 'entreprises uniquement dans b>
type_id code> = 34 et 35, j'ai compris qu'il voulait dire l'un des deux, mais pas nécessairement tous les deux.et i> signifie les deux, ou i> signifie l'un des deux.
et dans i> peut signifier non plus. Ce serait formidable si l'Op a éliminé cela. Je ne dis pas que tu as tort, je dis simplement que ça me confondait.
Maintenant que vous avez clarifié, pourquoi avez-vous accepté une réponse qui ne répond pas à votre exigence?
@forpas La 2e requête répond à mes critères. Ne veut pas les entreprises qui sont en 8
Non, cela ne répond pas à vos critères. Il retournera user_ids qui n'ont que type_id = 34 ou uniquement type_id = 35 car ils ne sont pas tous les deux pas 8.
@ forpas ah tu es à droite.