将两个查询合二为一

Posted

技术标签:

【中文标题】将两个查询合二为一【英文标题】:Join two queries into one 【发布时间】:2012-02-10 11:08:27 【问题描述】:

有没有办法将这两个查询合并为一个?

query = "select foo from TABLE where foo like '%foo%'";

if (query.empty())
    query = "select bar from TABLE where bar like '%foo%'"

更新:

select ifnull(foo,bar) from TABLE where foo like 'foo%' or bar like '%foo%';

感谢Kamal 的创意

【问题讨论】:

if (query.empty()) 你的意思是查询的结果吗? 【参考方案1】:

已编辑

我刚刚意识到这可以返回 多个 行 - 这是解决方法:

select foo from TABLE where foo like '%foo%'
union all
select bar from TABLE where bar like '%foo%'
and not exists (select 'x' from TABLE where foo like '%foo%')

使用UNION ALL(不是UNION)会更快,因为UNION排序结果。

已编辑

已提出非联合解决方案的请求。我没有。

【讨论】:

为什么查询中有X @Bohemian,谢谢你,但如果没有union,有办法吗? 我可能解释错了,但据我所知,如果第一个查询为空,他只想要第二个查询,因此无需像您那样运行 3 个选择。 @Duglas Thx 注意到错字 - 已修复。 @Diego 我在 3 个查询中看不到任何解决方法【参考方案2】:

对于甲骨文

Select NVL(foo,bar) from TABLE where foo like '%foo%' or bar like '%foo%';

【讨论】:

【参考方案3】:

如果您不希望 bar 返回而 foo 确实返回记录,请尝试:

select foo from TABLE where foo like '%foo%'
union all
select bar from TABLE
where bar like '%foo%' and 
      not exists (select null from TABLE where foo like '%foo%')

或者,没有联合的版本:

select case when foo like '%foo%' then foo else bar end as foobar
where foo like '%foo%' or 
      (bar like '%foo%' and 
       not exists (select null from TABLE where foo like '%foo%'))

【讨论】:

+1 以获得正确的解决方案。但是,就像@Bohemian 一样,使用union all 会删除重复项,这可能不是我们想要的吗? @aF。 union all 确实 删除重复项。 union.【参考方案4】:
   if not exists (select top 1 foo from TABLE where foo like '%foo%')
        select bar as MyColumn from TABLE where bar like '%foo%'
    else
        select foo as MyColumn from TABLE where foo like '%foo%'

【讨论】:

【参考方案5】:

我不知道mysql的语法但是 在 sql server 中我们这样使用:-

  IF EXISTS(select foo from TABLE where foo like '%foo%')
    BEGIN 
    select foo from TABLE where foo like '%foo%'
    END
    ELSE
    select bar from TABLE where bar like '%foo%

【讨论】:

他想将两个查询合并为一个。不纠正语法:P 不,如果第一个没有返回任何东西,他只想要第二个

以上是关于将两个查询合二为一的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个 sql 查询合二为一? [复制]

使用媒体查询将两个部分合二为一

将两个 T-SQL 数据透视查询合二为一

如何将这两个查询组合成一个查询?

将两个访问表合二为一

如何使用条件语句将两个搜索结果语句合二为一?