2015-01-02 22 views
0

in mysql我有一個包含三列的表 - id,reference_id和order_number。 一個訂單可以使用主訂單的ID引用另一個訂單。 id中的值是散列值,訂單號由增量值創建。在mysql中使用特定條件和排序順序創建子查詢

| 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 
+0

感謝您的幫助。解決方法是: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 – Patrick

回答

0

試試這個:

order by coalesce(reference_id, id), id