带有LEFT JOIN和sqlite的HAVING子句

时间:2014-10-21 15:06:02

标签: sqlite greatest-n-per-group

我有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,也有人知道如何获得结果吗?

1 个答案:

答案 0 :(得分:0)

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