Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: frufru 28. 03. 2018, 11:01:20

Název: Zjištění duplicit v SQL tabulce
Přispěvatel: frufru 28. 03. 2018, 11:01:20
Zdravim,

mam nasledujucu tabulku:

nazov firmy      cislo faktury     variabilny symbol     
prva110
prva220
prva320
druha440
druha550
druha640
prva770
prva870
prva990

Zistit duplicity v jednom stlpci - napr. vo variabilnom symbole viem, ale potreboval by som zlozitejsi dotaz, ktoreho vysledkom by bolo:

nazov firmy      cislo faktury     variabilny symbol     
prva220
prva320
druha440
druha640
prva770
prva870

je nieco take vobec v sql mozne? ak ano mozte ma nakopnut spravnym smerom pls? za akukolvek pomoc vopred velka vdaka.
Název: Re:sql duplicity
Přispěvatel: Ondra Satai Nekola 28. 03. 2018, 11:14:27
Group by podle sloupecku, co te zajimaji. A pokud ma skupina vic nez jeden clen...
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: Kit 28. 03. 2018, 12:05:50
Podle mne je mnohem jednodušší zabránit duplicitě už při vzniku slovem UNIQUE v definici sloupce tabulky.
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: Ondra Satai Nekola 28. 03. 2018, 12:09:42
Podle mne je mnohem jednodušší zabránit duplicitě už při vzniku slovem UNIQUE v definici sloupce tabulky.

To ale asi neni soucasti tohohle cviceni z Databaze 101, protoze DDL se bere az pozdeji ;)
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: peter 28. 03. 2018, 12:22:51
select t1.*
from faktura t1
join faktura t2 on t1.variabilnySymbol=t2.variabilnySymbol and t1,cisloFaktury!=t2.cisloFaktury
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: Marek 28. 03. 2018, 12:42:18
Udělal bych to na 2x:
1) zjistit, které záznamy jsou duplicitní na dvojici "nazov firmy", "variabilny symbol"
2) na tyto záznamy provést join původní tabulky

SELECT
T1.*
FROM TABULKA T1
JOIN
(SELECT
     nazov firmy,
    variabilny symbol
GROUP BY nazov firmy,
            variabilny symbol
HAVING COUNT(*) > 1) T2
ON (T1.nazov firmy = T2.nazov firmy)
AND (T1.variabilny symbol = T2.variabilny symbol)
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: frufru 28. 03. 2018, 12:59:52
Podle mne je mnohem jednodušší zabránit duplicitě už při vzniku slovem UNIQUE v definici sloupce tabulky.

v tomto pripade dupliticu nie je mozne riesit priamo v db lebo rozne firmy mozu pouzivat rovnake cislovanie svojich faktur(cize mozu existovat rovnake VS). rovnake VS by ale nemali vzniknut pri jednej firme(a ani tam to celkom neplati, lebo napr. taky orange pouzivat ako VS cislo zmulvy alebo cislo zakaznika, takze viacere faktury mozu mat rovnake VS).
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: frufru 28. 03. 2018, 13:04:25
select t1.*
from faktura t1
join faktura t2 on t1.variabilnySymbol=t2.variabilnySymbol and t1,cisloFaktury!=t2.cisloFaktury

dik, toto vyzera pouzitelne. uz mi niekto radil, ze mam na to pouzit selfjoin, len som nevedl ako presne to spravit...
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: none_ 28. 03. 2018, 13:13:51
Samozrejme, ze jde vytvorit unikatni constrain pro vice sloupcu. Ve vasem pripade neco jako UNIQUE KEY (nazev_firmy, variabilni_symbol).
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: Kit 28. 03. 2018, 13:44:21
Podle mne je mnohem jednodušší zabránit duplicitě už při vzniku slovem UNIQUE v definici sloupce tabulky.

v tomto pripade dupliticu nie je mozne riesit priamo v db lebo rozne firmy mozu pouzivat rovnake cislovanie svojich faktur(cize mozu existovat rovnake VS). rovnake VS by ale nemali vzniknut pri jednej firme(a ani tam to celkom neplati, lebo napr. taky orange pouzivat ako VS cislo zmulvy alebo cislo zakaznika, takze viacere faktury mozu mat rovnake VS).

UNIQUE může hlídat duplicitu n-tice sloupců. Každý záznam v DB by měl být unikátní.

Proč nemá každá firma svou databázi?
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: al 28. 03. 2018, 16:53:37
Ahoj, trochu si dovolim dotaz rozsirit. Jak by se resila situace, kdy chci ziskat pocet neduplicitnich a 'not null' hodnot v radku?

smena   pracovnik1   pracovnik2   pracovnik3   
1   FrantaPepaJirka
2   AloisFrantanull   
3   AloisAloisnull

Vysledek:

smena   pracovnik1   pracovnik2   pracovnik3   pritomno_na_smene   
1   FrantaPepaJirka3
2   AloisFrantanull   2
3   AloisAloisnull1
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: Logik 28. 03. 2018, 17:42:30
COUNT(DISTINCT .... ) WHERE ...
Název: Re:Zjištění duplicit v SQL tabulce
Přispěvatel: Logik 28. 03. 2018, 17:44:36
Jo, v řádku, tak to musíš posčítat. Řádkové operace SQL nepodporuje. Čili něco jako

3 - CAST(IS_NULL(sloupec_1)) - - CAST(IS_NULL(sloupec_2)) - CAST(IS_NULL(sloupec_3))

Ale pokud něco takovýho potřebuješ Ty, tak si blbě navrhnul strutkturu db. A pokud to potřebuje
cvičící, tak blbě navrhnul cvičení :-)