2017-04-18 142 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