You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL关联两张表设置多WHERE条件时conversions.status筛选不生效问题

错误原因

你的SQL存在两处核心问题,导致conversions.status过滤条件不生效:

1. 条件写法错误

conversions.status = ('approved' or 'pending')不符合SQL语法逻辑:OR是布尔运算符,执行时会先计算括号内'approved' or 'pending'的结果,非空字符串在数据库中会被判定为真,最终括号内返回布尔值true,你的条件实际等价于conversions.status = true,自然匹配不到任何符合要求的记录。
正确写法二选一即可:

  • 使用IN运算符:conversions.status IN ('approved', 'pending')
  • 拆分条件:conversions.status = 'approved' OR conversions.status = 'pending'

2. 左连接过滤条件位置错误

你使用LEFT JOIN关联conversions表,却把该表的过滤条件写在WHERE子句中,会直接让左连接失效:左连接中没有匹配到转换记录的行,所有conversions相关字段都是NULL,WHERE子句对conversions.status的判断会直接过滤掉这些NULL行,最终等价于INNER JOIN conversions的效果。
如果你需要保留所有符合要求的点击记录、无论是否有对应转换,需要把conversions的过滤条件移到LEFT JOIN的ON子句中;如果你确实只需要返回有符合状态转换的点击记录,直接把LEFT JOIN改为INNER JOIN即可,避免逻辑歧义。

修正后的代码示例(保留左连接逻辑)

SELECT clicks.offer_id, clicks.offer_name, clicks.country, clicks.device_type, clicks.os_name, conversions.name , clicks.ip_address as Session, conversions.conversion_ip as Conversion, conversions.currency as Currency , conversions.payout as Payout 
FROM clicks 
JOIN users ON clicks.affiliate_id = users.id 
LEFT JOIN conversions ON clicks.transaction_id = conversions.click_transaction_id 
  AND conversions.status IN ('approved', 'pending')
WHERE clicks.affiliate_id = '2' 
  AND date(clicks.created_at) BETWEEN '2021-11-08' AND '2021-12-07'

内容的提问来源于stack exchange,提问作者Eva Glaude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:15:03