【问题标题】:HAVING clause with a LEFT JOIN and sqlite带有 LEFT JOIN 和 sqlite 的 HAVING 子句
【发布时间】:2014-12-16 20:55:47
【问题描述】:

我有 2 个表,例如 T1 和 T2,具有 1-n 关系(n 可以为 0)。我需要加入 2 张桌子,但仅限于最新的 T2。所以我的查询是这样的:

select * from t1 left join t2 on t1.a = t2.b group by t1.a having t2.c=max(t2.c)

问题是,如果 T2 上没有行,则查询不会返回行,尽管有 LEFT JOIN。我认为这在 SQL 标准方面是不正确的。

那么有谁知道即使 n=0 也能得到结果?

【问题讨论】:

    标签: sqlite greatest-n-per-group


    【解决方案1】:

    HAVING 在分组之后执行。 并且任何与 NULL 的比较都会失败,因此这会过滤掉带有 n=0 的行。

    无论如何,t2.c=max(t2.c) 没有意义,也不会做你想做的事。

    如果你有 SQLite 3.7.11 或更高版本,你可以在结果中使用max() 来选择其他列的 GROUP BY 结果来自的行:

    SELECT *, max(t2.c)
    FROM t1 LEFT JOIN t2 ON t1.a = t2.b
    GROUP BY t1.a
    

    【讨论】:

    • have 子句适用于其他数据库,适用于 n>0 的 sqlite。无论如何,您的解决方案有效,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2017-05-05
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多