UNION中ORDER By的使用

所union的各个子查询要有相同数量的列,且对应位置的列必须具有相同的数据类型;但列的名字可以不同。

SELECT
    e.travelOrderid,
    e.travelDate,
    e.travelTime,
    e.travelstatus,
    e.travelStart,
    e.travelEnd,
    e.travelPrice,
    e.traveldistance,
    e.travelMinute,
    e.startlon,
    e.startlat,
    f.lat AS endlat,
    f.lon AS endlon
FROM
    (
        SELECT
            c.travelOrderid,
            c.travelDate,
            c.travelTime,
            c.travelstatus,
            c.travelStart,
            c.travelEnd,
            c.travelPrice,
            c.traveldistance,
            c.travelMinute,
            c.endid,
            d.lon AS startlon,
            d.lat AS startlat
        FROM
            (
                SELECT
                    b.start_station_id AS sartid,
                    b.end_station_id AS endid,
                    b.order_id AS travelOrderid,
                    b.send_date AS travelDate,
                    b.send_time AS travelTime,
                    b. STATUS AS travelstatus,
                    a.start_station_name AS travelStart,
                    a.end_station_name AS travelEnd,
                    a.price AS travelPrice,
                    a.distance AS traveldistance,
                    a.run_time AS travelMinute
                FROM
                    u_line a
                RIGHT JOIN u_order_base_${surfix} b ON a.id = b.line_id
                WHERE
                    b.customer_id = #{memberid}
                AND b.mobile = #{phone}
                UNION ALL
                    SELECT
                        b.start_station_id AS sartid,
                        b.end_station_id AS endid,
                        b.order_id AS travelOrderid,
                        b.send_date AS travelDate,
                        b.send_time AS travelTime,
                        b. STATUS AS travelstatus,
                        a.start_station_name AS travelStart,
                        a.end_station_name AS travelEnd,
                        a.price / 100 AS travelPrice,
                        a.distance AS traveldistance,
                        a.run_time AS travelMinute
                    FROM
                        u_line a
                    RIGHT JOIN u_order_base_${surfix} b ON a.id = b.line_id
                    WHERE
                        b.customer_id = #{memberid}
                    AND b.mobile = #{phone}
                    ORDER BY
                        travelDate DESC,
                        travelTime DESC
            ) c
        LEFT JOIN u_station d ON c.sartid = d.station_id
    ) e
LEFT JOIN u_station f ON e.endid = f.station_id

 

posted on 2015-11-12 14:18  盖世大将军  阅读(832)  评论(0)    收藏  举报

导航