【问题标题】:mysql right join where returns empty on one clausemysql right join where 在一个子句上返回空
【发布时间】:2012-05-18 09:55:46
【问题描述】:

我有以下疑问:

SELECT * FROM my_users as U 
RIGHT JOIN subscribers AS S ON S.userid = U.user_id 
WHERE S.approved > 0 AND S.channel_id = 1 AND S.alert_level >= 90

如果我取消最后一个 AND 子句 (AND S.alert_level >= 90),搜索将完全按预期工作。离开最后一个 AND 子句,我得到一个空结果集。

显然,我检查了订阅者表以确保将返回的用户 ID 具有正确的 alert_level 并且他们都有 90,所以这应该返回 2 个用户......并且 S.alert_level 是一个 smallint(6)。

我在这里遗漏了什么明显的东西吗?

谢谢!

【问题讨论】:

  • 这听起来很奇怪。您说您“检查了订阅者表以确保将返回的用户 ID 具有正确的警报级别”,但您为什么需要这样做?当您尝试“取消最后一个 AND 子句 (AND S.alert_level >= 90) 搜索完全按预期工作”时,您应该已经能够看到 alert_level。你没想过检查吗?现在可以查了吗?
  • 砰!是的……只需要另一双眼睛!
  • 我转贴为答案,以防您想编辑和/或接受它。

标签: mysql join where


【解决方案1】:

检查这个查询的结果:

SELECT * FROM my_users as U 
RIGHT JOIN subscribers AS S ON S.userid = U.user_id 
WHERE S.approved > 0 AND S.channel_id = 1

注意为该结果集中的每一行返回的S.alert_level 的值。它可能不会超过 90。这就解释了为什么添加最后一个条件不会给您任何行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多