使用特定条件和排序顺序在mysql中创建子查询

时间:2015-01-02 09:01:28

标签: mysql subquery

在mysql中我有一个包含三列的表--id,reference_id和order_number。 可以使用主订单的ID将一个订单引用到另一个订单。 id中的值是哈希值,订单号由增量值创建。

| id   |reference_id|order_number
|---------------------------------
| 0741 | NULL       | 000001
| 0519 | NULL       | 000002
| 3814 | 0741       | 000003
| 8163 | 0741       | 000004
| 6102 | 0519       | 000005
|---------------------------------

现在我希望显示order_number排序的结果,但带有引用的行除外。 这些行应直接显示在原始订单下。

预期结果是:

| id   |reference_id|order_number
|---------------------------------
| 0741 | NULL       | 000001
| 3814 | 0741       | 000003
| 8163 | 0741       | 000004
| 0519 | NULL       | 000002
| 6102 | 0519       | 000005
|---------------------------------

我之前在PHP中使用了两个单独的查询,但现在需要在SQL中使用它。 任何提示如何管理这个? 它甚至可能吗?

编辑: 我的解决方案是:

SELECT h1.id, h1.reference_id, h1.order_number
FROM test_order h1
LEFT JOIN test_order h2 on h2.reference_id = h1.id
ORDER BY coalesce(h2.order_number, h1.order_number), h1.order_number

1 个答案:

答案 0 :(得分:0)

试试这个:

order by coalesce(reference_id, id), id