Autor Zpráva
Mustermann
Profil *
Zdravím pánové, potřeboval bych poradit jak vypsat z následující tabulky unikátní hodnoty ve sloupcích hodnota1 a hodnota2

id | hodnota1 | hodnota2 |
-------------------------------.
1 | hruška | jablko |
2 | třešeň | jablko |
3 | hruška | NULL |
4 | jablko | meloun |

potřebuju vypsat následující:
hruška, jablko, třešeň, meloun

díky moc
Keeehi
Profil
Mustermann:
To zavání špatným návrhem tabulky. Nehezky se toho dá docílit takto
SELECT hodnota1 AS hodnota FROM tabulka
UNION
SELECT hodnota2 AS hodnota FROM tabulka
Pak ale s největší pravděpodobností přestanou fungovat indexy a podobné vychytávky.
Mustermann
Profil *
jak tam ale naroubuju to GROUP BY? takhle mi to vypíše vše...

jak líp navrhnout tabulku v tomto případě? představte si, že na každém řádku máte jeden ovocný koktejl a máte 2 ingredience (hodnota1 a hodnota2) a já potřebuju vypsat všechny unikátní ingredience


tak už jsem si naštudoval, že group by netřeba... ale stále mě nenapadá jak zlepšit návrh tabulky
TomášK
Profil
Vhodné řešení je rozdělit to na víc tabulek: koktejly(id, nazev), ingredience(id, nazev) a vazební tabulka koktejly_ingredience(koktejl_id, ingredience_id), viz Některé časteji řešené dotazy pro MySQL - FAQ » Musíte pojmenovávat sloupce s indexem (jmeno1, jmeno2, jmeno3, …)
_es
Profil
Mustermann:
na každém řádku máte jeden ovocný koktejl a máte 2 ingredience (hodnota1 a hodnota2)
[#4] rieši, okrem iných, už spomenutých nedostatkov, aj to, že môžu byť igrendiencie aj tri, štyri, päť, ..., alebo trebárs len jedna.
Mustermann
Profil *
v mém případě jsou vždy max 2 ingredience, je to jen příklad
Radek9
Profil
Mustermann:
Je špatné se na tohle spoléhat. Nikdy nemůžeš vědět, jestli náhodou nenastane situace, kdy bys tam potřeboval ty ingredience třeba 3. A je hloupost tam přidávat další sloupec. Navíc ti tam takhle vzniká hromada duplicitních záznamů. A to ani nemluvíme o příkladu, kdy bys potřeboval tu ingredienci přejmenovat. Řešení přes 3 tabulky je optimální.
Kajman
Profil
Mustermann:
takhle mi to vypíše vše

V [#2] by mělo být za oběma select ještě distinct.
Keeehi
Profil
Kajman:
Opravdu? Právě tím jsem si nebyl jistý a původně jsem je tam měl. Tak jsem si to otestoval bez nich a duplicity tam nebyly. Tak jsem to raději ještě konzultoval s manuálem a tam bylo přímo napsáno, že UNION odstraňuje duplicity. Pro zachování duplicit by bylo potřeba použít UNION ALL.
Kajman
Profil
Keeehi:
Máš pravdu, union to zařídí sám i bez distinct.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: