2017-04-26 3 views
2

Ich habe eine komplexe Zeichenfolge, die wie folgt beginnt: SELECT COUNT(*) AS 'columnName' .... Das Ergebnis zeigt eine positive oder 0-Nummer an. Was ich will, ist, wenn es 0 ist, ich möchte string1 drucken (anstelle von 0) und wenn es höher als 0 ist, möchte ich string2 (anstelle dieser Zahl) drucken. Der Vorbehalt ist, dass ich keine bedingten Anweisungen, keine if s oder case s verwenden möchte. Ich habe über eine Ersatzfunktion nachgedacht, aber ich glaube nicht, dass es funktioniert. Danach könnte dann eine VIEW (virtuelle Tabelle zum Speichern der Ergebnisse?) Funktionieren? Ich möchte keine ursprünglichen Tabellendaten in irgendeiner Weise ändern, ich möchte nur die Ausgabe manipulieren. Ich kann es nicht herausfinden, ich bin ein SQL-Anfänger. Hilfe?MYSQL - Ersetzen Sie 0 mit einer Zeichenfolge und nicht 0 mit einer anderen Zeichenfolge in der SQL-Abfrageausgabe ohne Bedingungen

+3

Wenn Sie ein Anfänger sind, sollten Sie 'CASE' verwenden.Dies ist der richtige Ansatz.Zusätzlich gibt' count (*) fast nie 0. –

+0

ich würde sagen, Ihre Anzahl zu varchar dann wenden Sie ersetzen wenn wirklich wollen, ersetzen – maSTAShuFu

Antwort

3
select COALESCE((select 'string1' as s 
        from table1 
        having count(*) < 0) 
       ,'string2') 

Above Abfrage gibt string 1, wenn es keine Aufzeichnungen sind in der Tabelle sonst kehrt string 2

+0

Dies ist genau das, was ich wollte.Ich wusste nicht über die 'COALESCE' Schlüsselwort.Danke! –

+0

Dies ist keine Kritik an einem perfekt v Antwort, aber die Tatsache, dass dies das ist, was Sie wollten, scheint als ob es einen Fehler in der Prämisse der Frage gibt. @ RestlessC0bra, Sie scheinen nicht zu erkennen, dass dies * genau * das gleiche wie 'SELECT CASE WHEN ist (SELECT 1 AS s aus Tabelle1 mit COUNT (*) <0) ist nicht NULL THEN 'string1' ELSE 'string2' END; '(oder eine beliebige Anzahl ähnlicher Konstrukte). Es gibt keinen Grund, bedingte Ausdrücke zu vermeiden, da sie logisch gültig und in der Regel viel intuitiver sind, zB "SELECT IF (EXISTS (SELECT * FROM table1), 'string1', 'string2');' –

+0

@ Michael-sqlbot Es gibt keine Fehler. Das ist was ich wollte und worüber ich geschrieben habe. Und ja, ich stimme zu. –

2

Der richtige Ansatz ist CASE zu verwenden, aber es gibt auch andere Möglichkeiten:

select elt(1 + least(count(*), 1), 'string1', 'string2') 

count(*) fast nie 0 zurückgibt. Es gibt nur 0, wenn es keine group by ist und die Tabelle keine Zeilen (oder alle Zeilen wurden von der where herausgefiltert.

Verwandte Themen