Coalesce (MySQL)
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))
- 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`