2017-04-18 91 views
5

我有一个表是这样的:从表中选择记录,如果某些价值存在,如果不是,请选择其他记录

projectName | info 
-------------------- 
    all | i1 
    all | i2 
    all | i3 
    name1 | i4 
    name1 | i5 
    all | i6 

我有一个检查项目名称查询。如果它存在于表格中,则必须只选择关于该特定项目的信息。如果它不存在,我必须得到'所有'项目的信息。

例如,如果我在我的条目是“名1”,我的输出应该是:

i4 
i5 

如果我的条目是“名2”,我的输出应该是:

i1 
i2 
i3 
i6 

有一种方法,我可以在MySQL查询中做到这一点?我查找了一些示例,但我发现的所有内容都是关于从两个不同的表中检索信息的。

+0

为什么你需要做到这一点在MySQL查询?这可能会更容易在您的应用程序中执行。 –

+0

@JeffersonLima其实我只是好奇而已。如果我不能解决这个问题,我会在我的申请内完成。 – Bizzys

回答

4

一种方法是使用UNION ALL

SELECT info 
FROM mytable 
WHERE projectName = 'name1' 

UNION ALL 

SELECT info 
FROM mytable 
WHERE projectName = 'all' AND 
     NOT EXISTS (SELECT 1 
        FROM mytable 
        WHERE projectName = 'name1') 

Demo here

3
select * from projects 
where projectName = case when exists (select * from projects where projectName = 'name1') 
    then 'name1' 
    else 'all' 
end 
+0

但你输出的是项目名称而不是项目信息 – dsharew

+0

@dsharew我输出所有列'select *'。您仍然可以从表中选择您想要的任何列。 –

+0

得到了很好的解决方案 – dsharew

相关问题