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