【问题标题】:UNION Query-display results in order queries are writtenUNION Query——按查询写入的顺序显示结果
【发布时间】:2010-11-02 08:41:10
【问题描述】:

示例 -

select * from discussion where title like '%india%' 
UNION 
select * from discussion where title like '%Australia%'

它以讨论 ID 的顺序显示结果,混合了两种类型的结果

我想先显示印度的结果,然后是澳大利亚的结果,我不能使用选项 ALl,因为我还需要删除重复的行。

应该怎么做?

【问题讨论】:

    标签: sql sql-order-by union union-all


    【解决方案1】:

    您可以添加一列来订购

    select *, 1 as ORD from discussion where title like '%india%' 
    UNION 
    select *, 2 as ORD from discussion where title like '%Australia%'
    
    order by ORD
    

    编辑 - 2010 年 11 月 29 日

    由于 ORD 的重复问题,我正在考虑一种可能更优雅的方式来实现这一目标

    Select * from discussion
    where title like '%india%' or title like '%Australia%'
    order by (case when title like '%india%'then 1 else 2 end)
    

    【讨论】:

    • +1,迄今为止唯一一个不用外部选择的答案。
    • 这里有一个问题,它也给了我重复的条目。一个结果可能会出现多次。解决办法是什么
    • 嗯... UNION 默认会消除重复项。我在这里看到的唯一原因是标题中同时包含印度和澳大利亚,并且由于添加了 ORD 列而没有被排除在外。一种可能的解决方案是稍微更改其中一个查询以排除另一个查询的结果。例如,您可以将第二个查询中的 where 更改为 ' where title like %Australia% 而不是 %india% '。
    • @il_guru 实际上我正在尝试在数据库中搜索多个关键字。拆分关键字后,我必须根据关键字的数量运行大量查询。为所有联合添加 not like 选项会使查询变得复杂。-
    • @il_guru 查询 - 从讨论中选择 *, 1 作为 ORD (disText 像 '%India%' 和 disText 像 '%Australia%' 和 disText 像 '%Canada%' ) UNION select *, 2 作为 ORD 来自讨论 where ( disText like '%India%' AND disText like '%Australia%') UNION select *, 3 作为 ORD 从讨论 where ( disText like '%Australia%' AND disText like '%Canada%') UNION select *, 4 as ORD from Discussion where ( disText like '%Canada%' AND disText like '%India%') UNION select *, 5 as ORD from Discussion where ( disText like '%India%' OR disText like '% Australia%' OR disText like '%Canada%' )。
    【解决方案2】:

    试试:

    SELECT * FROM
    (
      select 1 OrderNo, d.* from discussion d where title like '%india%' 
      UNION 
      select 2 OrderNo, d.* from discussion d where title like '%Australia%'
    )
    ORder by OrderNo
    

    【讨论】:

      【解决方案3】:
      select * from
      (
      select * from discussion where title like '%india%' 
      UNION 
      select * from discussion where title like '%Australia%'
      )
      ORDER BY title DESC
      ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-24
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 2012-01-02
        • 1970-01-01
        • 2014-11-20
        相关资源
        最近更新 更多