代码之家  ›  专栏  ›  技术社区  ›  ryeguy

如何进行这种查询?

sql
  •  2
  • ryeguy  · 技术社区  · 16 年前

    用户 可以拥有 悬浮液 . 我想选择一个 用户 他的 悬浮液 但我只想在 暂停。暂停日期>现在() . 不管怎样,我都要返回用户。

    听起来像是左连接,但是:

    SELECT *
    FROM users
    LEFT JOIN suspensions ON suspensions.user_id=users.id
    WHERE suspensions.suspended_date > now()
    

    如果他们确实有中止条款的话会很好地工作,但是如果他们没有中止条款的话会引起麻烦,因为where子句总是失败的。

    我如何用一个查询来写这个?

    3 回复  |  直到 13 年前
        1
  •  3
  •   Scott Ivey    16 年前

    您可以尝试将筛选器从WHERE移到JOIN语句

    SELECT *
    FROM   users 
           LEFT JOIN suspensions 
           ON suspensions.user_id=users.id AND suspensions.suspended_date > now()
    
        2
  •  0
  •   Jon    16 年前
    SELECT *
    FROM users
    LEFT JOIN suspensions ON suspensions.user_id=users.id
    WHERE suspensions.suspended_date > now() or suspensions.suspended_date is null
    

    这应该可以做到。

        3
  •  0
  •   Jeffrey Kemp    13 年前

    试试这个:

    SELECT *
    FROM users
    LEFT JOIN suspensions ON suspensions.user_id=users.id
    WHERE suspensions.suspended_date > now() or suspensions.user is null