Coalesce (MySQL)

Uit De Vliegende Brigade
Versie door Jeroen Strompf (overleg | bijdragen) op 6 mei 2016 om 16:01 (Jeroen Strompf heeft pagina Alternatieve tabel indien leeg (MySQL) hernoemd naar Coalesce (MySQL))
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen
  • Hoe kan er automatisch een ander tabel worden gebruikt voor het opvullen van lege plekken?
  • Ik heb bv. vier tabellen met prijslijsten, maar niet eentje is compleet. Hoe zorg ik ervoor dat-ie met de eerste tabel begint, en gaten automatisch opvult met de tweede, derde, etc. tabel?

Coalesce

Dit is waar het het commando coalesce voor bedoeld is! Het selecteert de eerste niet-Null-waarde uit een rij argumenten. Ik heb het nog niet helemaal onder de knie, maar het gaat ongeveer zo:

Met 1 tabel

select 
	sku, 
	`SellPrice01`,
	`SellPrice02`,
	coalesce(`SellPrice01`,`SellPrice02`) 
from tbl_root;

Met een join

Dit werkt!

select

	tbl_root.sku,
	tbl_root.sellprice01
	pricelist_201604.sellprice02,
	coalesce(tbl_root.sellprice01,pricelist_201604.sellprice02)

from tbl_root
join pricelist_201604 on tbl_root.sku = pricelist_201604.sku;

Onduidelijk

Ik heb de indruk dat je niet in dezelfde query kunt testen op null-waarde van de coalesce-functie:

select 
	sku, 
	`SellPrice01`,
	`SellPrice02`,
	coalesce(`SellPrice01`,`SellPrice02`) as prijs
from tbl_root
where prijs is not null; -- WERKT NIET - KOLOM 'prijs' WORDT NIET HERKEND
select 
	sku, 
	`SellPrice01`,
	`SellPrice02`,
	coalesce(`SellPrice01`,`SellPrice02`) as prijs
from tbl_root
where coalesce(`SellPrice01`,`SellPrice02`) is not null; -- Werkt ook niet???

Ifnull

SELECT
    stuff,
    ifnull(c.blended_role,r.blended_role) as `Job Description`,
    morestuff
FROM
    everyone e
LEFT JOIN contractors c
    ON c.id = e.id
LEFT JOIN staff s
    ON s.id = e.id
LEFT JOIN roles r
    ON r.id = s.role

Select case

SELECT
    (CASE
        WHEN c.blended_role IS NULL THEN
            r.blended_role
        ELSE
            c.blended_role
        END) as `Job Description`

Bronnen