mysql - 连接表并按 2 个不同的列排序

标签 mysql sql left-join

我有一个查询,列出了付款(付款表),我希望它按任务的日期排序(2 个单独的表 - quotedb 和包装)这些付款与

我的查询:

SELECT a.* 
FROM payments AS a 
LEFT JOIN quotedb AS b ON a.orderid = b.id  
LEFT JOIN packaging AS p ON a.orderid = p.id  
WHERE a.status='Pending' AND (b.moveday<'$today' OR p.datestamp<'$today')
ORDER BY b.moveday, p.datestamp

付款表示例:

id payment   orderid
------------------- 
1  payment1  1
2  payment2  2
3  payment3  3
4  payment4  4
5  payment5  5
6  payment6  6

quotedb 表示例:

id moveday
-----------
1  05.07.18  > related to payments table id 1
2  08.07.18  
3  10.07.18

打包表示例:

id datestamp
-----------
4  06.07.18  > related to payments table id 4
5  07.07.18
6  19.07.18

我从表中加入结果,但排序有问题,查询似乎打印了未排序的“打包”表结果,然后是按移动日期排序的“quotedb”结果

我希望这些结果按(加入的 moveday 和 datestamp)排序

最佳答案

您可以使用UNION ALL 来合并quotedbpackaging 表。并使用 grp 生成一个数字来生成 Order by 序号

SELECT a.* 
FROM payments a 
LEFT JOIN
(
    SELECT 1 grp,id,moveday AS day
    FROM quotedb
    UNION ALL
    SELECT 2,id,datestamp
    FROM packaging
) t on a.orderid = t.id
ORDER BY t.grp,t.day

sqlfiddle

关于mysql - 连接表并按 2 个不同的列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51417004/

相关文章:

mysql - SQL 左连接没有得到预期的结果

javax.servlet.ServletException : No action config found for the specified url

mysql - 根据表的其余部分计算单行的排名

php mysqli 将日期插入DATE类型

sql - 通过 SSH 将 SQL DB 备份到 Mac 桌面

python - SQLAlchemy 左联接 WHERE 子句被转换为零和一

mysql - 如何使用join语句从另一个表中选择最新记录的值?

mysql - 在 MySQL 中获得最高分

sql - 配置单元:选择所有范围从一列的最大值开始的行

mysql - 具有两个条件的 LEFT OUTER JOIN 无法正常工作