Je me demandais si quelqu'un ici pouvait m'aider avec un problème que j'ai. J'essaie de combiner 2 requêtes mysql en une requête en utilisant des sous-requêtes. J'ai actuellement les 2 requêtes séparemment qui produisent les résultats que je veux:Combinaison de 2 requêtes mysql en utilisant des sous-requêtes
Voici les 2 requêtes:
SELECT contact_id FROM contacts
WHERE acc_id = 1 AND email LIKE "paul%"
SELECT c0.contact_id
FROM contact_tags c0 INNER JOIN contact_tags c1
on c0.contact_id = c1.contact_id INNER JOIN contact_tags c2
on c1.contact_id = c2.contact_id where c0.tag_id = 1
AND c1.tag_id = 2 AND c2.tag_id = 3
Voici quelques exemples de données des tables:
Contacts:
contact_id acc_id email
54 1 [email protected]
Tags:
id contact_id tag_id
1 54 1
2 54 2
3 54 3
4 50 1
5 50 2
Les deux requêtes lorsque exécuter indépendamment produire ce résultat qui est correct:
contact_id
54
Cependant je suis tryi ng nicher une requête dans l'autre pour produire le même résultat à partir d'une seule requête:
Voici ce que j'ai essayé:
SELECT c0.contact_id
FROM
(
SELECT contact_id
FROM contacts
WHERE acc_id = 1 AND email LIKE "paul%"
) AS c0
LEFT JOIN contact_tags AS c1
ON c1.contact_id = c0.contact_id
AND (
SELECT c0.contact_id FROM contact_tags c0
INNER JOIN contact_tags c1
on c0.contact_id = c1.contact_id
INNER JOIN contact_tags c2 on c1.contact_id = c2.contact_id
where c0.tag_id = 1 AND c1.tag_id = 2 AND c2.tag_id = 3
)
WHERE c1.id IS NOT NULL
Cependant je sais que ce ne va pas comme je veux revenir juste la seul identifiant de contact unique qui correspond à toutes les conditions ci-dessus:
contact_id
54
54
54
54
Si quelqu'un pouvait me aider avec cela, il serait très apprécié.
Merci
Pourquoi la première requête ne renvoie pas '50' aussi bien? –
@ypercube - désolé c'est mon erreur la deuxième rangée ne devrait pas être là. Je vais l'enlever maintenant –
Et vous voulez une requête qui montre que 'contact_id's sont dans les deux listes, non? –