Diskuze: MySQL UNION
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Vlastník

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Při zběžném pohledu to vypadá docela OK, jen funkci DATE_FORMAT() bych raději vypíchl do vnějšího selectu, protože uvnitř bude dělat bugr při sortu. Také se to tím trochu zjednoduší.
Teď tu debatujeme o výkonové stránce těch UNIONů, docela by mě to zajímalo.
UNION ALL nijak nezatěžuje DB server, ale naopak je výhodnější než samostatné dotazy.
Napsal bych to asi jinak, ale moc se mi v tom šťourat nechce.
Teď ale koukám, že jsou tam zcela zbytečně rozdělováni registrovaní a neregistrovaní uživatelé. A máme hned o jeden UNION ALL méně.
David Jančík právě říkal, že měl ten UNION pomalý, také mi to přijde divné. Jak bys vyřešil ty registrované a neregistrované? Chce pokaždé vybrat něco jiného.
Tam se používá LEFT JOIN a hodnoty NULL se odchytávají přes COALESCE().
Tohle je cool to si půjčím. Akorát, jak mám udělat, když chci něco jako:
SELECT `c`.*, COALESCE(`u`.`nick`, `c`.`nick`)
Musím ty hodnoty vypsat manuálně nebo to jde nějak pošéfit?
Lol, tak ono to funguje. Sem myslel, že to bude nějak kolidovat, ale ono to prostě tu hodnotu přepíše podle toho co bylo zadáno jako poslední.
Nevím, jestli to chápu správně, ale to by snad mělo být triviální:
SELECT `c`.*, COALESCE(`u`.`nick`, `c`.`nick`) AS `nick`
K hvězdičce mohu přidat i další sloupce.
Zobrazeno 9 zpráv z 9.