2016-04-08 10 views
2

ありがとうございます。MySql Union Immediate Merge to ParentテーブルID

2つのテーブルを1つにマージしようとしています。以下のクエリは、私が望む結果を返します。 UNION ALLが複数の表を結合することを認識しています。

しかし、私は親行の直後に2つの表の行をマージしたいです。

SELECT 
    temp.transactionId, 
    temp.amount, 
    temp.transactionType 
FROM 
    (
    (SELECT 
     sale.transaction_id AS transactionId, 
     sale.amount AS amount, 
     'SALE' AS transactionType 
    FROM 
    t_sales sale 
    WHERE 
     sale.merchant_id = '1' 
    ) 

    UNION ALL 

    (SELECT 
     refund.refund_transaction_id AS transactionId, 
     refund.amount AS amount, 
     'REFUND' AS transactionType 
    FROM 
     t_refunds refund 
    WHERE 
     refund.merchant_id = '1' 
    ) 
) 
AS temp 

上記のクエリは、sales rowsの終了後にすべてrefunds rowsを返します。しかし、私はすべてrefund rows immediate after each sales rowsを表示する必要があります。払い戻しテーブルには売上テーブルID (Primary Key)があります。これを達成する方法はありますか?

答えて

1

id/sale_idのorder byでこれを行うことができます。

これを試してみてください:

SELECT 
    temp.transactionId, 
    temp.amount, 
    temp.transactionType 
FROM 
    (
    (SELECT 
     sale.transaction_id AS transactionId, 
     sale.amount AS amount, 
     'SALE' AS transactionType, 
     id, 
     1 
    FROM 
    t_sales sale 
    WHERE 
     sale.merchant_id = '1' 
    ) 

    UNION ALL 

    (SELECT 
     refund.refund_transaction_id AS transactionId, 
     refund.amount AS amount, 
     'REFUND' AS transactionType, 
     sale_id as id, 
     2 
    FROM 
     t_refunds refund 
    WHERE 
     refund.merchant_id = '1' 
    ) 
    ORDER BY 4,5 
) 
AS temp 
+0

ディラン蘇、コメントに感謝を。あなたのアイデアを試してみましょう。 –