将两个查询合二为一
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 不,如果第一个没有返回任何东西,他只想要第二个以上是关于将两个查询合二为一的主要内容,如果未能解决你的问题,请参考以下文章