加入与另一个表的SQL查询
问题描述:
我正在使用以下查询来获取用户的最近记录。加入与另一个表的SQL查询
SELECT t1.username, t1.value, t1.date
FROM table t1
JOIN (select username, max(date) as maxdate from table
group by username) t2 on t1.username = t2.username
and t1.date = t2.maxdate
WHERE t1.date >= CURDATE()
ORDER BY t1.date DESC
它返回以下结构的表
------------------------
username | value | date
------------------------
我有以下结构
----------------------------
username | category | group
----------------------------
我怎样才能得到类似下面的表格结构
结果的另一个表(T3)-------------------------------------------
username | value | date | category | group
-------------------------------------------
如何加入这些关系?
答
你可以加入它的follwing方式:
SELECT t1.username, t1.value, t1.date, t3.category, t3.group
FROM table t1
JOIN (select username, max(date) as maxdate from table
group by username) t2 on t1.username = t2.username
and t1.date = t2.maxdate
JOIN table3 t3 ON t3.username=t1.username
WHERE t1.date >= CURDATE()
ORDER BY t1.date DESC
提示:我不知道MySQL,但我认为这是在MS SQL相同。
答
虽然直接join
是最有效和最快速的方法,但如果您要在t1 select语句(例如在t2 select中)上执行诸如max(date)
的操作,则可以使用类似于你在T2选择查询完成:
SELECT maintable.username, maintable.value, maintable.date, secondtable.category, secondtable.group
FROM (
SELECT t1.username, t1.value, t1.date
FROM table t1
JOIN (select username, max(date) as maxdate from table
group by username) t2 on t1.username = t2.username
and t1.date = t2.maxdate
WHERE t1.date >= CURDATE()
ORDER BY t1.date DESC
) maintable
JOIN table secondtable ON maintable.username = secondtable.username
注意,这绝不是最好的选择,如果你没有创建于内选择一个操作。
感谢您的解决方案。但不知何故,它的表现并不合格。见安德烈的答案。我已经尝试了两者。您的查询在我的服务器中以24.03秒返回。相反,安德烈的查询在2.46秒内返回。虽然谢谢 –
我同意,但这种解决方案不是面向性能的。 –