Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Vláďa J 25. 10. 2013, 10:29:03

Název: SQL - pomoc s dotazem
Přispěvatel: Vláďa J 25. 10. 2013, 10:29:03
Ahoj,

potřeboval bych pomoct s SQL dotazem s následujícíma podmínkama:

Mam tabulku v ní dva sloupce A a B s textem. Potřeboval bych do jednoho výstupu dostat kombinaci A a B seřazenou podle abecedy. Problém je ten, že A a B budou v některých případech obsahovat to samý, v tom případě tam chci takový záznam jenom jednou.

Jak si s tím poradit? Je to nějaký jednoduchý postup? Díky!
Název: Re:SQL - pomoc s dotazem
Přispěvatel: DK 25. 10. 2013, 10:46:52
co myslis kombinaci A a B? spojene sloupce?
Název: Re:SQL - pomoc s dotazem
Přispěvatel: tommm 25. 10. 2013, 11:04:28
http://www.w3schools.com/sql/ (http://www.w3schools.com/sql/)

Vim, ze to neni prima odpoved. Ale jak to bylo s rybou a rybarenim? :)
Název: Re:SQL - pomoc s dotazem
Přispěvatel: ASTS 25. 10. 2013, 11:41:15
Třeba něco jako
SELECT A,B FROM TABULKA GROUP BY A SORTED BY ASC;

Ahoj,

potřeboval bych pomoct s SQL dotazem s následujícíma podmínkama:

Mam tabulku v ní dva sloupce A a B s textem. Potřeboval bych do jednoho výstupu dostat kombinaci A a B seřazenou podle abecedy. Problém je ten, že A a B budou v některých případech obsahovat to samý, v tom případě tam chci takový záznam jenom jednou.

Jak si s tím poradit? Je to nějaký jednoduchý postup? Díky!
Název: Re:SQL - pomoc s dotazem
Přispěvatel: ASTS 25. 10. 2013, 11:42:46
Jo a pokud bys ty duplicity chtěl odstranit i v druhým sloupci, tak to povede na vnořený SELECT.

Třeba něco jako
SELECT A,B FROM TABULKA GROUP BY A SORTED BY ASC;

Ahoj,

potřeboval bych pomoct s SQL dotazem s následujícíma podmínkama:

Mam tabulku v ní dva sloupce A a B s textem. Potřeboval bych do jednoho výstupu dostat kombinaci A a B seřazenou podle abecedy. Problém je ten, že A a B budou v některých případech obsahovat to samý, v tom případě tam chci takový záznam jenom jednou.

Jak si s tím poradit? Je to nějaký jednoduchý postup? Díky!
Název: Re:SQL - pomoc s dotazem
Přispěvatel: Tomas Matejicek 25. 10. 2013, 12:04:46
Syntax pro MySQL je nasledujici:

SELECT DISTINCT A,B FROM tabulka ORDER BY A,B

Pro ostatni sql varianty je potreba dotaz upravit dle jejich konvenci.
Název: Re:SQL - pomoc s dotazem
Přispěvatel: jholas 25. 10. 2013, 13:38:25
A když píše, že to potřebuje do jednoho výstupu (pochopil jsem do jednoho sloupce) nepotřebuje spíš toto?

select distinct * from (select A from <table> union select B from <table>) t order by A;
Název: Re:SQL - pomoc s dotazem
Přispěvatel: DK 25. 10. 2013, 13:43:58
jholas: ja to pochopil tak, ze A i B muzou obsahovat stejne hodnoty a v tom pripade je neslucovat, takze tam pridat jeste podminku, ze A != B v selectech u unionu
Název: Re:SQL - pomoc s dotazem
Přispěvatel: jholas 25. 10. 2013, 13:53:37
jholas: ja to pochopil tak, ze A i B muzou obsahovat stejne hodnoty a v tom pripade je neslucovat, takze tam pridat jeste podminku, ze A != B v selectech u unionu

není lehký pořádně zformulovat zadání, tak aby bylo jednoznačný :-)

ale bylo tam něco takovýho, takže myslím, že se to nemá opakovat:
Citace
A a B budou v některých případech obsahovat to samý, v tom případě tam chci takový záznam jenom jednou

Jinak mam pocit, že díky tomu unionu už nemusí být distinct.
Název: Re:SQL - pomoc s dotazem
Přispěvatel: Vláďa J 27. 10. 2013, 09:37:01
Já jsem si myslel, že to píšu docela jasně, ale asi ne. :-D Každopádně díky všem za rady, SQL syntaxi jakž-takž znám, akorát jsem nevěděl, jak spojit výstup ze dvou sloupců do jednoho. Hodnoty samostatně v A a samostatně v B budou vždy unikátní. Co jsem potřeboval poradit, byl operátor UNION, jak radí jholas.

Z dokumentace jsem potom našel:
Citace
The UNION operator selects only distinct values by default. To allow duplicate values, use the ALL keyword with UNION.

Takže to rovnou řeší moje oba dva požadavky. Ještě jednou díky za radu!