SQL dotaz bez opakování výsledků

Picmaus

SQL dotaz bez opakování výsledků
« kdy: 19. 11. 2014, 13:42:04 »
Zdravim komunitu,

muze mi tu nekdo sbehly v (My/Lite)SQL poradit s dotazem?
Problem prevedu do jednoduche podoby.

Mam tabulku INVENTAR ktera obsahuje krom dalsich i polozky 'budova' VARCHAR(1) a 'podlazi' INT.
Tabulka obsahuje mnoho zaznamu kde jsou kombinace budova a podlazi casto stejne pro ruzny inventar.
Budova nabyva oznaceni od A do Z a podlazi od 0 do neznama.

Napr.
name='Zidle' type='Chair' budova='B' podlazi=2
name='Stul' type='Table' budova='B' podlazi=1
name='Kreslo' type='Chair' budova='B' podlazi=2
 
Potrebuji udelat seznam budov a podlazi pro inspekci inventare kde se nejaky vyskytuje ale bez opakovani.

Tj. aby v nem budova='B' podlazi=2 byla jen jednou

Dekuji
« Poslední změna: 19. 11. 2014, 13:52:51 od Petr Krčmář »


Picmaus

Re:SQL dotaz
« Odpověď #1 kdy: 19. 11. 2014, 13:52:39 »
Podotykam ze zaklady SQL znam, bude tam nejspis neco jako
SELECT budova, podlazi FROM INVENTAR WHERE <combination of buova.podlazi is not in select result yet>

Pavel...

Re:SQL dotaz bez opakování výsledků
« Odpověď #2 kdy: 19. 11. 2014, 13:54:45 »
Potrebuji udelat seznam budov a podlazi pro inspekci inventare kde se nejaky vyskytuje ale bez opakovani.

Tj. aby v nem budova='B' podlazi=2 byla jen jednou

klucove slovo pre google sa vola "DISTINCT"

Re:SQL dotaz bez opakování výsledků
« Odpověď #3 kdy: 19. 11. 2014, 13:58:43 »
Kód: [Vybrat]
SELECT DISTINCT budova, podlazi FROM …
DISTINCT

Jsou to základy SQL…

karel

Re:SQL dotaz bez opakování výsledků
« Odpověď #4 kdy: 19. 11. 2014, 14:16:47 »
nerikej opravdu znas ?


Karel (jiný)

Re:SQL dotaz bez opakování výsledků
« Odpověď #5 kdy: 19. 11. 2014, 14:31:36 »
Možností, jak toho dosáhnout, je několik. Třebas zmíněný DISTINCT nebo vhodně zvolené GROUP BY (to vám navíc umožní přidat COUNT). Ale nikdy jako WHERE podmínka. Základy SQL vám opravdu chybí. A tím teď nemám na mysli syntaxi, ale vůbec chápání, co SELECT je. To referenční příručka nedožene, na to je potřeba učitel nebo učebnice.

Picmaus

Re:SQL dotaz bez opakování výsledků
« Odpověď #6 kdy: 19. 11. 2014, 16:35:06 »
Dekuji vsem za odpovedi, s SQL valim jen velmi okrajove a DISTINCT jsem i tak nikdy nepouzil - normalne bych pro notoricky opakovane hodnoty 'budova' a 'podlazi' zvolil spesl tabulku s id (1:n vazba) pro mensi objem databaze. Coz v realnem resenem problemu mozne neni.

To Karel
WHERE bych tam stejne nedal (chybi specificka podminka podle ktere filtrovat, ze) to jsem nechal v pseudo dtazu schvalne aby kazdy pochopil o co mi jde.

Picmaus

Re:SQL dotaz bez opakování výsledků
« Odpověď #7 kdy: 19. 11. 2014, 16:45:00 »
to karel (ten prvni)
S programovanim jako profesi jsem sekl pred ctyrmi roky, jak jsem si precetl Vas komentar tak mi to hned pripomelo proc :)

tommm

Re:SQL dotaz bez opakování výsledků
« Odpověď #8 kdy: 19. 11. 2014, 17:39:03 »
Podotykam ze zaklady SQL znam ....
... SQL valim jen velmi okrajove a DISTINCT jsem i tak nikdy nepouzil ...

To ma bejt nejakej druh humoru? :D

karel

Re:SQL dotaz bez opakování výsledků
« Odpověď #9 kdy: 19. 11. 2014, 17:51:46 »
to karel (ten prvni)
S programovanim jako profesi jsem sekl pred ctyrmi roky, jak jsem si precetl Vas komentar tak mi to hned pripomelo proc :)

ja kdyz si precet dotaz tak to take chapu  :)

Picmaus

Re:SQL dotaz bez opakování výsledků
« Odpověď #10 kdy: 19. 11. 2014, 18:07:35 »
To tommm
Prisaham ze jsem DISTINCT doposud nemel potrebu pouzit a nebo mi uz pamet neslouzi.
To je tezky, jsem nauceny ze duplicity do DB nepatri jeste z dob IT praveku kdy 1MB neco znamenal..

To karel
No vidite ten pokrok, uz mi netykate..

Re:SQL dotaz bez opakování výsledků
« Odpověď #11 kdy: 19. 11. 2014, 18:23:51 »
Prisaham ze jsem DISTINCT doposud nemel potrebu pouzit a nebo mi uz pamet neslouzi.
Dokonce existovalo i klíčové slovo UNIQUE ...

To je tezky, jsem nauceny ze duplicity do DB nepatri jeste z dob IT praveku kdy 1MB neco znamenal..
Ale ony jsou duplicity a duplicity.
Asi bych se mrkl na to, proč/jak/kdy/za_co/kdy_ne normální formy ...

Picmaus

Re:SQL dotaz bez opakování výsledků
« Odpověď #12 kdy: 19. 11. 2014, 19:34:52 »
Prisaham ze jsem DISTINCT doposud nemel potrebu pouzit a nebo mi uz pamet neslouzi.
Dokonce existovalo i klíčové slovo UNIQUE ...

Jo tak UNIQUE si pamatuju, to se ale pouzivalo jako atribut pri CREATE TABLE, ze?
Bohuzel nic co by mi pomohlo kdyz uz tabulka existuje (mozna tak pri CREATE TEMPORARY TABLE ?)

To je tezky, jsem nauceny ze duplicity do DB nepatri jeste z dob IT praveku kdy 1MB neco znamenal..
Ale ony jsou duplicity a duplicity.
Asi bych se mrkl na to, proč/jak/kdy/za_co/kdy_ne normální formy ...
Tak tak, v prikladu kde mam budova VARCHAR(1) a podlazi INT (mel by byt shortint/char) by zrovna mely zustat protoze sizeof(VARCHAR(1)) + sizeof (shortint/char) < sizeof (INT) pro id. Neni to tak?

To je ale pouze vhodne zvoleny priklad, realny pripad VARCHAR(28) a VARCHAR(8) je zvlast tabulka jasna volba..

To uz by mi tu ale asi kazdy spilal do amatera a IT neznaboha ikdyz jsem tu tabulku nedelal, ze? ;)

j

Re:SQL dotaz bez opakování výsledků
« Odpověď #13 kdy: 19. 11. 2014, 19:56:11 »
To tommm
Prisaham ze jsem DISTINCT doposud nemel potrebu pouzit a nebo mi uz pamet neslouzi.
To je tezky, jsem nauceny ze duplicity do DB nepatri jeste z dob IT praveku kdy 1MB neco znamenal..

Ehm, to se obavam, ze databazi vidis jak jednou za 100let.

Priklad? easy.

Mas rekneme objednavky, a k nim radky se zbozim. Nikde neni receno, ze na jedny objednavce muze byt jedno zbozi jen na jedinym radku. Duvodu jsou tisice, muzes to mit za ruzny ceny, zakaznik si to tak proste objednal, ...

A ted chces trebas zjistit, kteri zakaznici si koupily cojavim ... "uberviagra 2015" protoze je potrebujes sezvat, nebot si zjistil, ze po tom sice neco vstava, ale neco jinyho prozmenu odpada. A chces kazdyho jen jednou.

Kolemjdoucí

Re:SQL dotaz bez opakování výsledků
« Odpověď #14 kdy: 19. 11. 2014, 20:31:57 »

Na tohle GROUP BY/DISTINCT potřeba není.
select * from customers where exists (....)