Zjištění duplicit v SQL tabulce

frufru

Zjištění duplicit v SQL tabulce
« kdy: 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.
« Poslední změna: 28. 03. 2018, 12:01:41 od Petr Krčmář »


Re:sql duplicity
« Odpověď #1 kdy: 28. 03. 2018, 11:14:27 »
Group by podle sloupecku, co te zajimaji. A pokud ma skupina vic nez jeden clen...

Kit

Re:Zjištění duplicit v SQL tabulce
« Odpověď #2 kdy: 28. 03. 2018, 12:05:50 »
Podle mne je mnohem jednodušší zabránit duplicitě už při vzniku slovem UNIQUE v definici sloupce tabulky.

Re:Zjištění duplicit v SQL tabulce
« Odpověď #3 kdy: 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 ;)

peter

Re:Zjištění duplicit v SQL tabulce
« Odpověď #4 kdy: 28. 03. 2018, 12:22:51 »
select t1.*
from faktura t1
join faktura t2 on t1.variabilnySymbol=t2.variabilnySymbol and t1,cisloFaktury!=t2.cisloFaktury


Marek

Re:Zjištění duplicit v SQL tabulce
« Odpověď #5 kdy: 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)

frufru

Re:Zjištění duplicit v SQL tabulce
« Odpověď #6 kdy: 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).

frufru

Re:Zjištění duplicit v SQL tabulce
« Odpověď #7 kdy: 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...

none_

Re:Zjištění duplicit v SQL tabulce
« Odpověď #8 kdy: 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).

Kit

Re:Zjištění duplicit v SQL tabulce
« Odpověď #9 kdy: 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?

al

Re:Zjištění duplicit v SQL tabulce
« Odpověď #10 kdy: 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

Logik

  • *****
  • 1 031
    • Zobrazit profil
    • E-mail
Re:Zjištění duplicit v SQL tabulce
« Odpověď #11 kdy: 28. 03. 2018, 17:42:30 »
COUNT(DISTINCT .... ) WHERE ...

Logik

  • *****
  • 1 031
    • Zobrazit profil
    • E-mail
Re:Zjištění duplicit v SQL tabulce
« Odpověď #12 kdy: 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í :-)