2013-06-14 13 views
25

Mała pomoc tutaj. Naprawdę nie rozumiem, jak używać tej koalescencji w MySQLJak używać Coalesce w MySQL

Przeczytałem wszystkie strony na stronie 1 wynik how to use coalsece w wyniku Google.

Wiem, że oznacza to, że zwraca pierwszą niezerową wartość, która napotka i null w przeciwnym razie.

Ale nadal jest dla mnie niejasna.

  1. Dlaczego widzę zapytania, które zwracają wiele wartości? Czy nie jest zwracana tylko pierwsza niezaznaczona wartość?
  2. A jak to decyduje, która kolumna ma być podstawą? coalesce(column1,column2)? co jeśli pierwsza kolumna ma wartość zerową, a inna kolumna nie ma wartości null?
  3. Lub jeśli się mylę lub moja składnia jest zła, jak ją poprawnie napisać?
  4. Czy ktoś może podać bardzo dobry i prosty przykład, jak go używać?
  5. A kiedy jest to pożądane.
+0

'koalescencji()' tylko zwrócić jedną wartość - pierwsza wartość nie-zerową, jak wspomniano. Jeśli masz konkretny przykład, który temu przeciwdziała, zaktualizuj swoje pytanie. – fenway

Odpowiedz

30
  1. Jak to widziałem kwerendy, która zwraca wiele wartości? czy nie jest zwracana tylko pierwsza niezaznaczona wartość null?

    Tak, jest to zwracana tylko pierwsza zwracana wartość NIEZEROWA. Musisz się mylić z pytaniami, które widziałeś, gdy myślałeś, że tak nie jest: gdybyś mógł pokazać nam przykład, moglibyśmy pomóc wyjaśnić nieporozumienie.

  2. A jak to decyduje, która kolumna ma być podstawą? koalesce (kolumna 1, kolumna 2)? co jeśli pierwsza kolumna ma wartość zerową, a inna kolumna nie ma wartości null?

    W celu jej argumentów: w tym przykładzie column1 przed column2.

  3. Lub jeśli im jest źle lub moja składnia jest zła, jak mogę ją poprawnie napisać?

    Nie mylisz się.

  4. Czy ktoś może podać bardzo dobry i prosty przykład, jak go używać?

    Zrobione z the documentation:

    
    mysql> SELECT COALESCE(NULL,1); 
         -> 1 
    mysql> SELECT COALESCE(NULL,NULL,NULL); 
         -> NULL 
    
  5. A gdy pożądane jest, aby używać.

    Pożądane jest użycie, gdy chce się wybrać pierwszą wartość nie-NULL z listy.

+2

Dalej odpowiedź (5) - również pomocna przy korzystaniu z LEWEGO DOŁĄCZENIA. – fenway

+0

@fenway: Zależy od logiki, którą próbuje się zaimplementować. Większość 'LEFT JOIN's, które piszę, nie używa' COALESCE() '. – eggyal

+0

oh, zapomniałem, kolejne pytanie. Kiedy chciałbym zapytać tylko o pierwszą nieważną w tysiącach rekordów? –

0

Jest to doskonały przykład łączyć jeśli zmieni zerowej pola/kolumny do tego, co chcesz, żeby być w przypadku null 0 i 1. Skopiuj ten do edytora MySQL będzie to wyglądać dużo lepiej

Wybrać "Kolumna1 (Nie chcę Dotknąć)", koalescencja (kolumna 2 (Aby ustawić zero na zero), 0) jako kolumnę 2 (podać taką samą nazwę jak np. "kolumna 2"), koalescencja (kolumna 3 (Zamiast wartości zerowej ustawionej na 1), 1) jako kolumna 3 (nadaj taką samą nazwę, jaka była np. "Kolumna3")
z "MydataTable" Gdzie "zmierza" w ("2015-04-10", "2015-04- 03 ',' 2015-03-27 ',' 2015-04-17 ') oraz id = 10 order by "somedates";

15

Osobiście używam koalescencji, gdy chcę znaleźć pierwszą kolumnę, która nie jest pusta w rzędzie z listy priorytetów.

Załóżmy na przykład, że chcę uzyskać numer telefonu z tabeli klienta i mają 3 kolumny na numery telefonów o nazwie komórka, dom i praca, ale chcę tylko pobrać pierwszy numer, który nie jest pusty.

W tym przypadku mam priorytet mobilny, a następnie do domu, a następnie do pracy.

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 zwróci pierwszą niepustą kolumnę lub wartość.

Przykład Zastosowanie:

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

Wyniki przykład:

my_column my_other_column  results 
null  null    'default' 
null  0     '0' 
null  'jimmy'    'jimmy' 
'bob'  'jimmy'    'bob' 
Powiązane problemy