加入与另一个表的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 

注意,这绝不是最好的选择,如果你没有创建于内选择一个操作。

+0

感谢您的解决方案。但不知何故,它的表现并不合格。见安德烈的答案。我已经尝试了两者。您的查询在我的服务器中以24.03秒返回。相反,安德烈的查询在2.46秒内返回。虽然谢谢 –

+1

我同意,但这种解决方案不是面向性能的。 –