从一个表中选择并按另一个表的列排序

时间:2014-04-28 14:51:45

标签: mysql sql

我是MySQL的新手,我找不到任何解决此问题的方法。我很感激所有的帮助。

我有表A和表B相互关联。我希望从表A中选择并按表B的“日期”列生成结果顺序。这2个表由'user_id'链接。我的表格如下:

Table A: 
... 
name 
user_id (link to table B)

Table B: 
user_id 
date

有可能吗?再次感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您想要进行内部联接。类似的东西:

 Select A.user_id, A.name, B.date from A
 INNER JOIN B ON B.user_id = A.user_id
 WHERE (whatever your filtering is)
 ORDER BY B.date

你应该对加入进行一些研究,因为它对于数据库开发来说是一个非常重要和重要的事情(并且了解它有助于构建良好的架构)。

它的要点是,对于A中的每个user_id,我想在B中找到匹配的user_id(因为行INNER JOIN B ON B.user_id = A.user_id)。内连接只会带来匹配,所以如果A的ID为2,但B中没有ID,则不会返回记录(类似于B中没有记录的记录)。

现在,需要注意的一点是,如果我在A中有一条记录,用户ID为5,但B中有两条记录,用户ID为5,则内部联接返回两条记录,每条记录加入A数据B数据。

现在,正如您对此问题的评论所要求的那样,您想要获得更高的评分,您需要最大的功能。

 Select A.user_id, A.name, B.date, Max(B.rating) from A
 INNER JOIN B ON B.user_id = A.user_id
 WHERE (whatever your filtering is)
 GROUP BY A.user_id
 ORDER BY B.date

这有两个部分,聚合函数Max()和Group By语句。它们一起工作,以便对于每个唯一的A.user_id,数据库将返回具有最高B.rating的记录集。你也可以使用相反的Min()函数,选择最低的B.rating,或Count()来计算记录的出现次数,或者Sum()将把该列的记录加在一起。

与数据库查询一样,使用它们,确保返回正确的数据并了解原因。当我构建查询时,我通常从select * from table开始,找出我需要加入的内容,验证我的记录看起来好的方式,然后开始限制列和过滤事物。您的里程可能因方法而异,但验证数据总是一个好主意。

答案 1 :(得分:0)

JOIN这两个表格都有user_id,从TableA中选择所需的列,然后在ORDER BY中添加dateTableB字段。

试试这个:

SELECT T1.*
FROM TableA T1 JOIN
     TableB T2 ON T1.user_id=T2.user_id
ORDER BY T2.date

详细了解JOIN s herehere