Sql 如何进行这种查询?
用户可以有暂停。我想选择一个用户和他的暂停,但我只希望暂停在暂停.suspended\u date>现在()的位置。我想返回用户不管 听起来像是左连接,但是:Sql 如何进行这种查询?,sql,Sql,用户可以有暂停。我想选择一个用户和他的暂停,但我只希望暂停在暂停.suspended\u date>现在()的位置。我想返回用户不管 听起来像是左连接,但是: SELECT * FROM users LEFT JOIN suspensions ON suspensions.user_id=users.id WHERE suspensions.suspended_date > now() 如果他们真的有停职,这会很好,但如果他们没有停职,就会造成麻烦,因为where条款总是会失败 我如何用
SELECT *
FROM users
LEFT JOIN suspensions ON suspensions.user_id=users.id
WHERE suspensions.suspended_date > now()
如果他们真的有停职,这会很好,但如果他们没有停职,就会造成麻烦,因为where条款总是会失败
我如何用一个查询来写这个
SELECT *
FROM users
LEFT JOIN suspensions ON suspensions.user_id=users.id
WHERE suspensions.suspended_date > now() or suspensions.suspended_date is null
这样就可以了。您可以尝试将筛选器从WHERE移到JOIN语句
SELECT *
FROM users
LEFT JOIN suspensions
ON suspensions.user_id=users.id AND suspensions.suspended_date > now()
试试这个:
SELECT *
FROM users
LEFT JOIN suspensions ON suspensions.user_id=users.id
WHERE suspensions.suspended_date > now() or suspensions.user is null
这不起作用,因为缺少的挂起不是“null”。它只是不存在。当左连接不匹配时,null将显示在表中与join子句不匹配的列中。嗯……它不在Postgres中。你在哪个数据库工作?很有趣。你在Postgres中试过我的问题吗?我查阅了文档,我的语法看起来也可以在那里使用。它在tSQL和MySQL中工作(我记得)。是的,我在postgres中尝试过,复制并粘贴了它。我没有得到结果。我的意思是,一个左连接当然会用空值填充不存在的右表,但它看起来不会将不匹配的右行视为空值,直到查询完成。WHERE过滤最终结果集,丢弃没有暂停的行。通过将where条件移动到联接中,可以允许左联接按预期工作。