mysql - 如果 Left Join 返回行,条件 Where 子句?

标签 mysql left-join where-clause conditional-statements

我觉得有一种方法可以使用条件 Cases 或 If 来做到这一点,但我就是想不出来。

下面的查询将三个表连接在一起,如果所有三个表都返回行,则效果很好。但是,在某些情况下,记录存在于 campaign_groups 和 new_advertisers 中,但不存在于 payment_transactions 中。

由于 WHERE 子句确保 payment_transactions.transaction_date >= campaign_groups.date_created,因此排除了零交易的行。

有没有办法只在 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

最佳答案

将条件移动到您的 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

关于mysql - 如果 Left Join 返回行,条件 Where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237661/

相关文章:

mysql - 将左连接与 min 一起使用

php - 如何在 JOIN 语句中使用 CASE 根据条件连接两个表?

sql - 在结果集中查找最近的日期

mysql - 在 SELECTed = VIEW rowID 处创建 View

php - 如何更新与另一行具有相同值的特定行?

mysql - 在mysql中使用同一个表分割多个计数

javascript - Node.js 同步调用护照本地注册

MySQL:删除整个数据库中的字符

mysql - 使用 "group by"带条件和 "group by"计算的计数记录总和

mysql - 在 SQL 中,WHERE 子句的顺序有什么影响吗?