2017-04-18 5 views
5

Ich habe eine Tabelle wie folgt aus:Wählen Sie Sätze aus der Tabelle, wenn bestimmte Wert vorhanden ist, wenn nicht, wählen Sie andere Datensätze

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

Ich habe eine Abfrage, die den Projektnamen überprüft. Wenn es in der Tabelle vorhanden ist, muss ich nur die Informationen zu diesem bestimmten Projekt auswählen. Wenn es nicht existiert, muss ich die Informationen für "alle" Projekte bekommen.

Zum Beispiel, wenn ich meinen Eintrag 'name1' sollte mein ausgegeben:

i4 
i5 

Wenn mein Eintrag 'name2' sollte mein ausgegeben:

i1 
i2 
i3 
i6 

Gibt es eine Möglichkeit, dies in einer MySQL-Abfrage zu tun? Ich suchte nach Beispielen, aber alles, was ich fand, ging es darum, Informationen von zwei verschiedenen Tabellen abzurufen.

+0

Warum Sie dies in einer MySQL-Abfrage tun müssen, tun? Dies wäre wahrscheinlich einfacher in Ihrer Anwendung zu tun. –

+0

@JeffersonLima Ich bin gerade neugierig geworden. Ich werde es innerhalb meiner Anwendung tun, wenn ich das nicht durcharbeiten kann. – Bizzys

Antwort

4

Eine Möglichkeit ist UNION ALL zu verwenden:

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

, aber Sie geben den Projektnamen anstelle der Projektinfo aus – dsharew

+0

@dsharew Ich gebe alle Spalten 'select *' aus. Sie können immer noch eine beliebige Spalte aus der Tabelle auswählen. –

+0

habe es sehr schöne Lösung – dsharew

Verwandte Themen