【问题标题】:Select from one table and order by column of another table从一个表中选择并按另一表的列排序
【发布时间】:2014-04-29 01:37:20
【问题描述】:

我对 MySQL 非常陌生,我找不到任何解决此问题的方法。感谢您提供各种帮助。

我有相互关联的表 A 和表 B。我希望从表 A 中选择并按表 B 的“日期”列排列结果。这 2 个表由“用户 ID”链接。我的表格如下:

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

Table B: 
user_id 
date

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

【问题讨论】:

    标签: mysql sql


    【解决方案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 为 2,则不会返回记录(类似于 B 中的记录而 A 中没有记录)。

    现在,需要注意的一点是,如果我在 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 开始,弄清楚我需要加入什么,沿途验证我的记录看起来不错,然后开始限制列和过滤东西。您的里程可能因方法而异,但验证数据始终是一个好主意。

    【讨论】:

    • 感谢您的回复!现在我又有另一个问题了。假设我在表 B 中有另一列“评级”。如果我在 A 中有一条用户 ID 为 5 的记录,但 B 中有两条用户 ID 为 5 的记录,我只想选择 B 中的一条记录有较高的评价,我应该怎么做?感谢您的帮助!
    【解决方案2】:

    JOIN 两个表都带有user_id,从TableA 中选择所需的列,并添加带有date 字段的ORDER BY 子句来自TableB

    试试这个:

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

    详细了解JOINs herehere

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 2017-11-13
      相关资源
      最近更新 更多