1

条件付きの Cases または Ifs を使用してこれを行う方法があるように感じますが、それを理解することはできません。

以下のクエリは 3 つのテーブルを結合し、3 つのテーブルすべてが行を返す場合にうまく機能します。ただし、campaign_groups と new_advertisers にはレコードが存在し、payment_transactions には存在しない場合があります。

payment_transactions.transaction_date >= Campaign_groups.date_created であることを確認する WHERE 句のため、トランザクションがゼロの行は除外されます。

LEFT JOIN が行を返す場合にのみ WHERE 句を適用する方法はありますか?

SELECT sum(payment_transactions.transaction_amount) as payment, 
            new_advertisers.account_id, 
            new_advertisers.advertiser_id,
            max(payment_transactions.transaction_date) as last_payment,
            campaign_groups.id,
            campaign_groups.date_created,
            TIMESTAMPDIFF(DAY, max(payment_transactions.transaction_date), NOW()) as days_passed
        FROM campaign_groups
        INNER JOIN new_advertisers ON campaign_groups.advertiser_id = new_advertisers.advertiser_id
        LEFT JOIN payment_transactions ON payment_transactions.account_id = new_advertisers.account_id
        WHERE payment_transactions.transaction_date >= campaign_groups.date_created
            AND campaign_groups.weekly_budget_cents > 0
        ORDER BY days_passed DESC
4

1 に答える 1

2

条件を ON 句に移動します。

LEFT JOIN payment_transactions
    ON payment_transactions.account_id = new_advertisers.account_id
    AND payment_transactions.transaction_date >= campaign_groups.date_created
WHERE campaign_groups.weekly_budget_cents > 0
于 2012-04-19T22:23:01.317 に答える