J'ai une campagne de table qui a envoyé les détails des mails de la campagne.comment écrire cette requête en utilisant des jointures?
campaign_table: campaign_id campaign_name flag
1 test1 1
2 test2 1
3 test3 0
une autre activité de campagne qui contient des détails sur les activités de la campagne.
campaign_activity: campaign_id is_clicked is_opened
1 0 1
1 1 0
2 0 1
2 1 0
Je veux obtenir toutes les campagnes avec la valeur du drapeau 3 et le nombre de colonnes is_clicked ayant une valeur 1 et le nombre de colonnes avec une valeur is_opened 1 en une seule requête.
ie. campaign_id campaign_name numberofclicks numberofopens
1 test1 1 1
2 test2 1 1
Je l'ai fait à l'aide de sous-requête avec la requête:
select c.campaign_id,c.campaign_name,
(SELECT count(campaign_id) from campaign_activity WHERE campaign_id=c.id AND is_clicked=1) as numberofclicks,
(SELECT count(campaign_id) from campaign_activity WHERE campaign_id=c.id AND is_clicked=1) as numberofopens
FROM
campaign c
WHERE c.flag=1
Mais les gens disent que l'utilisation des sous-requêtes ne sont pas une bonne convention de codage et vous devez utiliser se joindre au lieu de sous-requêtes . Mais je ne sais pas comment obtenir le même résultat en utilisant join. J'ai consulté certains de mes collègues et ils disent qu'il n'est pas possible d'utiliser joindre dans cette situation. Est-il possible d'obtenir le même résultat en utilisant des jointures? Si oui, s'il vous plaît dites-moi comment.
Il est généralement correct d'utiliser des sous-requêtes dans la clause where mais éviter de les utiliser comme des colonnes. –