【问题标题】:mysql join query order by two columnsmysql连接查询顺序由两列
【发布时间】:2016-08-19 11:50:51
【问题描述】:

我正在尝试加入两个表,并且在这两个表中我有 2 个相同的列名,例如 agent_id 和 date 这两个表都有 agent_id 和 date 实际上我加入了基于 agent_id 的表,现在我想按日期列排序,但是作为两个表有日期列,所以它显示该日期列两次我希望它应该显示一次,这里按日期排序是我的表格的一个例子:

Table 1 (sales_report)
date          agent_id  agent_name  agent_commission
01-Jan-2016   1         Jhon         200   
02-Jan-2016   2         Smith        250 
03-Jan-2016   3         Tracy        150
04-Jan-2016   4         Sam          120

Table 2 (payments)
date          agent_id  paid
02-Jan-2016   1         200   
03-Jan-2016   2         150 
04-Jan-2016   3         100
05-Jan-2016   4         50

我尝试通过 agent_id 加入这两个表现在我的问题是如何按日期订购?

这是我的查询:

SELECT *
FROM `sales_report`
INNER JOIN `payments`
ON `sales_report`.`agnt_id`=`payments`.`agnt_id` ORDER BY date

【问题讨论】:

  • 您要在哪个日期前订购?来自 sales_report 或付款?
  • 据我了解,您是正确的,您应该使用 Union 而不是 join。但是如果你能告诉我们预期的结果会更清楚
  • 实际上我只想将两个表的结果和按日期排序,例如,如果表 1 日期值为 '01-Jan-2016' 而表 2 日期值为 '02-Jan-2016 ' 所以系统应该打印第一个表的值,然后是第二个表的值,这是所有记录都会出现的
  • 这篇文章解决了我的问题:stackoverflow.com/questions/2309943/… 不管怎样,非常感谢

标签: mysql left-join inner-join


【解决方案1】:
    SELECT sr.*,pm.paid
    FROM `sales_report` as sr
    INNER JOIN `payments` as pm
    ON sr.`agent_id`=pm.`agent_id` 
    ORDER BY sr.date, pm.date

会从第一张餐桌上获取日期,并在第一张餐桌日期之前订购,然后是第二张餐桌日期。

【讨论】:

  • 第二个表格结果显示出现在第一个表格行的下方。我不希望每个表的所有列都排成一行
  • 换句话说,我只想合并这两个表,先显示旧的,然后显示最新的
【解决方案2】:
    SELECT * FROM
    (
         SELECT sr.date
            FROM `sales_report` as sr
         UNION
         SELECT pm.date
            FROM `payments` as pm
        )
    ORDER BY date

我想这就是你想要的,sales_reportpayments 都需要被视为一个表格。然后对其进行排序。

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
猜你喜欢
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多