2013-06-14 12 views
25

Un piccolo aiuto qui. Non capisco davvero come usare questa coalesce in MySQLCome usare Coalesce in MySQL

Ho letto tutte le pagine nella pagina 1 risultato di how to use coalsece nel risultato di Google.

Conosco il suo significato che restituisce il primo valore non nullo che incontra e null altrimenti.

Ma è ancora vago per me.

  1. Come mai ho visto query che restituiscono più valori? Non è solo il primo valore non nullo che viene restituito?
  2. E come decide quale colonna basare? coalesce(column1,column2)? cosa succede se la prima colonna è nullo e l'altra colonna non è nulla?
  3. Oppure se ho torto o se la mia sintassi è errata, come faccio a scriverlo correttamente?
  4. Qualcuno può fornire un esempio molto buono e semplice su come usarlo?
  5. E quando è desiderabile da usare.
+0

'COALESCE()' restituisce solo un valore singolo - il primo valore non nullo, come lei ha ricordato. Se hai un esempio specifico che non ti soddisfa, ti preghiamo di aggiornare la tua domanda. – fenway

risposta

30
  1. Come mai ho visto le query che restituisce più valori? non è solo il primo valore non nullo che viene restituito?

    Sì, è solo il primo valore non NULL restituito. Devi essere in errore riguardo alle domande che hai visto dove pensavi che non fosse il caso: se puoi mostrarci un esempio, potremmo essere in grado di aiutarti a chiarire l'equivoco.

  2. E come decidere quale colonna basare? coalizzarsi (column1, column2)? cosa succede se la prima colonna è nullo e l'altra colonna non è nulla?

    In base ai suoi argomenti: in questo esempio, column1 prima column2.

  3. O se sbaglio o la mia sintassi è errata, come faccio a scriverlo correttamente?

    Non hai torto.

  4. Qualcuno può fornire un esempio molto buono e semplice su come utilizzarlo?

    Tratto da the documentation:

    
    mysql> SELECT COALESCE(NULL,1); 
         -> 1 
    mysql> SELECT COALESCE(NULL,NULL,NULL); 
         -> NULL 
    
  5. E quando è auspicabile utilizzare.

    È consigliabile utilizzare ogni volta che si desidera selezionare il primo valore non NULL da un elenco.

+2

Ulteriore risposta (5) - anche molto utile quando si usano LEFT JOIN. – fenway

+0

@fenway: dipende dalla logica che si sta tentando di implementare. La maggior parte degli '' SINISTRA SINISTRA 'che scrivo non usano 'COALESCE()'. – eggyal

+0

oh, giusto, ho dimenticato, un'altra domanda. Quando dovrei voler solo interrogare il primo non nullo in migliaia di record? –

0

Questo è un perfetto esempio del Coalesce se cambieranno i campi/colonne nulli a ciò che si vuole loro di essere, nel caso dal nulla a 0 e 1. Copiare questo in un editor di mysql sembrerà un molto meglio

Seleziona "Colonna1 (Non voglio toccare)", coalesce (colonna2 (Che vuoi impostare a 0 se null), 0) come colonna2 (dai lo stesso nome di es. "colonna2"), coalesce (colonna3 (Invece di null impostato su 1), 1) come colonna3 (dargli lo stesso nome di es. "Colonna3")
da "MydataTable" Dove "somedates" in ('2015-04-10', '2015-04- 03 ',' 2015-03-27 ',' 2015-04-17 ') e id = 10 ordinati da' somedates ';

15

Personalmente utilizzo coalescenza quando voglio trovare la prima colonna che non è vuota di fila da una lista di priorità.

Ad esempio, desidero ottenere un numero di telefono da un tavolo clienti e hanno 3 colonne per i numeri di telefono denominati cellulare, casa e lavoro, ma voglio solo recuperare il primo numero che non è vuoto.

In questo caso, ho la priorità di mobile, quindi a casa e quindi lavoro.

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 restituirà la prima colonna o valore non nullo.

Esempio di utilizzo:

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

risultati Esempio:

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