2013-06-14 12 views
25

Ein wenig Hilfe hier. Ich verstehe wirklich nicht, wie man dieses Coalesce in MySQLWie verwendet man Coalesce in MySQL

verwendet Ich habe alle Seiten in Seite 1 Ergebnis von how to use coalsece in Google-Ergebnis gelesen.

Ich weiß seine Bedeutung, dass es den ersten Nicht-Null-Wert, den es trifft, und Null andernfalls zurückgibt.

Aber es ist immer noch vage für mich.

  1. Wie kommt es, dass ich Abfragen sah, die mehrere Werte zurückgeben? Wird nicht nur der erste Nicht-Null-Wert zurückgegeben?
  2. Und wie entscheidet es, welche Spalte zu stützen? coalesce(column1,column2)? Was ist, wenn die erste Spalte null ist und die andere Spalte nicht null ist?
  3. Oder wenn ich falsch liege oder meine Syntax falsch ist, wie schreibe ich es richtig?
  4. Kann jemand ein sehr gutes und einfaches Beispiel zur Benutzung geben?
  5. Und wenn es wünschenswert ist zu verwenden.
+0

'COALESCE()' nur einen einzigen Wert zurück - der erste Nicht-Null-Wert, wie Sie bereits erwähnt. Wenn Sie ein spezifisches Beispiel haben, das dies nicht akzeptiert, aktualisieren Sie bitte Ihre Frage. – fenway

Antwort

30
  1. Wie komme ich Abfragen sah, die mehrere Werte zurückgibt? Ist es nicht nur der erste Nicht-Null-Wert, der zurückgegeben wird?

    Ja, es wird nur der erste Nicht-NULL-Wert zurückgegeben. Sie müssen sich irren über die Fragen, die Sie gesehen haben, wo Sie dachten, dass das nicht der Fall war: Wenn Sie uns ein Beispiel zeigen könnten, könnten wir vielleicht helfen, das Missverständnis zu klären.

  2. Und wie entscheidet es, welche Spalte zu stützen? koaleszieren (Spalte1, Spalte2)? Was ist, wenn die erste Spalte null ist und die andere Spalte nicht null ist?

    In der Reihenfolge seiner Argumente: in diesem Beispiel column1 vor column2.

  3. Oder wenn ich falsch oder meine Syntax falsch ist, wie schreibe ich es richtig?

    Sie liegen nicht falsch.

  4. Kann jemand ein sehr gutes und einfaches Beispiel zur Benutzung geben?

    von the documentation Genommen:

    
    mysql> SELECT COALESCE(NULL,1); 
         -> 1 
    mysql> SELECT COALESCE(NULL,NULL,NULL); 
         -> NULL 
    
  5. Und wenn es wünschenswert ist, zu verwenden.

    Es ist wünschenswert, immer dann zu verwenden, wenn man den ersten Nicht-NULL-Wert aus einer Liste auswählen möchte.

+2

Weiter zu beantworten (5) - auch sehr hilfreich bei der Verwendung von LINKEN VERBINDUNGEN. – fenway

+0

@fenway: Hängt von der Logik ab, die man zu implementieren versucht. Die meisten "LINKEN VERBINDUNGEN", die ich schreibe, verwenden nicht "COALESCE()". – eggyal

+0

oh richtig, ich habe vergessen, eine andere Frage. Wann möchte ich nur die erste nicht null in tausend von Datensätzen abfragen? –

0

Dies ist ein perfektes Beispiel für die Coalesce ist, wenn wird die Null-Felder/Spalten ändern, was Sie sie im Fall von null auf 0 und 1. Kopieren Sie diese in einen MySQL-Editor sein wollen es aussehen viel besser

Wählen Sie "Column1 (nicht berühren wollen)", coalesce (column2 (dass Sie auf 0 wenn Null setzen möchten), 0) als column2 (geben Sie denselben Namen wie zB "column2"), coalesce (column3 (Anstelle von null auf 1 gesetzt), 1) als column3 (geben Sie denselben Namen wie zB "column3")
von "MydataTable" Wo ist 'somedates' in ('2015-04-10', '2015-04- 03 ',' 2015-03-27 ',' 2015-04-17 ') und id = 10 sortieren nach' somedates ';

15

Ich persönlich verwende Koaleszenz, wenn ich die erste Spalte suchen möchte, die nicht in einer Zeile aus einer Prioritätenliste leer ist.

Sagen Sie zum Beispiel Ich möchte eine Telefonnummer aus einer Kundentabelle erhalten und sie haben 3 Spalten für Rufnummern mit dem Namen Handy, Haus und Arbeit, aber ich möchte nur die erste Nummer abrufen, die nicht leer ist.

In diesem Fall habe ich die Priorität von mobilen, dann zu Hause und dann arbeiten.

TABLE STRUCTURE 
-------------------------------------------- 
| id | customername | mobile | home | work | 
-------------------------------------------- 
| 1 | Joe   | 123 | 456 | 789 | 
-------------------------------------------- 
| 2 | Jane   |  | 654 | 987 | 
-------------------------------------------- 
| 3 | John   |  |  | 321 | 
-------------------------------------------- 

SELECT id, customername, COALESCE(mobile, home, work) AS phone FROM customers 

RESULT 
------------------------------ 
| id | customername | phone | 
------------------------------ 
| 1 | Joe   | 123 | 
------------------------------ 
| 2 | Jane   | 654 | 
------------------------------ 
| 3 | John   | 321 | 
------------------------------ 
1

COALESCE gibt die erste Nicht-Null-Spalte oder den Wert zurück.

Verwendungsbeispiel:

SELECT COALESCE(my_column, my_other_column, 'default') as username FROM my_table; 

Beispiel Ergebnisse:

my_column my_other_column  results 
null  null    'default' 
null  0     '0' 
null  'jimmy'    'jimmy' 
'bob'  'jimmy'    'bob'