首页 > 解决方案 > 如何将 UNION 与两个具有 ORDER BY 的语句一起使用

问题描述

我正在尝试从不同的表中获取文件夹和文件名,并使用每个查询语句的结果,按它们的降序排序,update_date然后使用UNION.

如果我分别运行这两个查询,它确实有效,并且将根据日期的降序从数据库中检索结果。但是当我UNION与他们一起使用时,它并没有给我正确的答案。

获得它的正确方法是什么?

(
    SELECT create_date, folder_name AS actual_name, folder_id, folder_displayed_name AS displayed_name, update_date, delete_flag, NULL AS img_url, NULL AS protect_flag, NULL AS file_type, list_order
    FROM aaaaa_estate.docs_folder
    WHERE delete_flag =0
    AND inside_of_folder =  ''
    ORDER BY update_date DESC

    )
    UNION (

    SELECT create_date, file_name AS actual_name, id, displayed_name, update_date, delete_flag, img_url, protect_flag, file_type, list_order
    FROM aaaaa_estate.docs_contract
    WHERE delete_flag =0
    AND inside_of =  ''
    ORDER BY update_date DESC
)

如果我在最后使用 Order By 子句。update_date ORDER BY DESC它根据我不想要的数据对所有数据进行排序。

我想向用户显示文档列表,例如 Google Drive、Always Folder first 和 files second 中的 Google 显示。他们每个人都排序update_date DESC

标签: mysqlsqlsql-order-byunion

解决方案


您可以尝试以下 whereORDER BY子句取决于两列:

SELECT * FROM
(
    SELECT 1 qry_nr, create_date, folder_name AS actual_name, folder_id, folder_displayed_name AS displayed_name, update_date, delete_flag, NULL AS img_url, NULL AS protect_flag, NULL AS file_type, list_order
    FROM aaaaa_estate.docs_folder
    WHERE delete_flag =0
    AND inside_of_folder =  ''


    UNION 

    SELECT 2 qry_nr, create_date, file_name AS actual_name, id, displayed_name, update_date, delete_flag, img_url, protect_flag, file_type, list_order
    FROM aaaaa_estate.docs_contract
    WHERE delete_flag =0
    AND inside_of =  ''
 -- ORDER BY update_date DESC
) q
ORDER BY q.actual_name, q.qry_nr;

推荐阅读