2017-05-12 1 views
0

La requête suivante est tous les s de retournaient » où affiliate_id le montant dû est plus de 50.Utilisation d'une jointure dans une sous-requête?

 SELECT 
      t1.affiliate_id 
     FROM 
     (
      SELECT affiliate_id, SUM(payout) AS payout_total 
      FROM exp_cdwd_aff_purchases 
      GROUP BY affiliate_id 
     ) t1 
     LEFT JOIN 
     (
      SELECT affiliate_id, SUM(amount_paid) AS amount_paid_total 
      FROM exp_cdwd_aff_payments 
      GROUP BY affiliate_id 
     ) t2 
      ON t1.affiliate_id = t2.affiliate_id 
     WHERE t1.payout_total > COALESCE(t2.amount_paid_total, 0) + 50 

Je dois aussi retourner une adresse e-mail pour chaque affiliate_id de la table exp_member_data. Le affiliate_id peut être référencé par rapport à member_id.

Je pensais que ce qui suit pourrait fonctionner, mais ce n'est pas le cas. Quelqu'un peut-il expliquer comment je peux obtenir ce résultat?

 SELECT 
      t1.affiliate_id, t1.m_field_id_26 
     FROM 
     (
      SELECT af.affiliate_id, SUM(af.payout) AS payout_total, md.m_field_id_26 
      FROM exp_cdwd_aff_purchasesAS af 
      LEFT JOIN exp_member_data AS md.member_id = af.affiliate_id 
      GROUP BY affiliate_id 
     ) t1 
     LEFT JOIN 
     (
      SELECT affiliate_id, SUM(amount_paid) AS amount_paid_total 
      FROM exp_cdwd_aff_payments 
      GROUP BY affiliate_id 
     ) t2 
      ON t1.affiliate_id = t2.affiliate_id 
     WHERE t1.payout_total > COALESCE(t2.amount_paid_total, 0) + 50 

Répondre

1

Si je lis correctement, la chose la plus facile de votre requête à faire serait d'ajouter juste une autre jointure à la fin d'apporter l'adresse e-mail. Quelque chose comme ceci:

SELECT 
    t1.affiliate_id, 
    COALESCE(t3.m_field_id_26, 'email is NA') AS m_field_id_26 
FROM 
(
    SELECT affiliate_id, SUM(payout) AS payout_total 
    FROM exp_cdwd_aff_purchases 
    GROUP BY affiliate_id 
) t1 
LEFT JOIN 
(
    SELECT affiliate_id, SUM(amount_paid) AS amount_paid_total 
    FROM exp_cdwd_aff_payments 
    GROUP BY affiliate_id 
) t2 
    ON t1.affiliate_id = t2.affiliate_id 
LEFT JOIN exp_member_data t3 
    ON t1.affiliate_id = t3.member_id 
WHERE t1.payout_total > COALESCE(t2.amount_paid_total, 0) + 50 

Faire la jointure dans votre requête d'agrégation, comme vous avez actuellement, est probablement pas idéal parce que sous_requête existe pour correspondre les choses, de ne pas inclure des informations d'adresse e-mail.