Autor Zpráva
xlifer
Profil
Potřebuji vypsat z tabulky pouze záznamy, které jsou vícekrát, ale pomocí příkazu group takto mi to nejde:

select * from tabulka group by sloupec


Ještě upřesním, že sloupec není primary ani uniqe key, ale bežný sloupec na kterém může dojít k duplicitním datům.
okolojdouci
Profil *
Napadá mě ..

SELECT DISTINCT * FROM tabulka WHERE ID NOT IN (SELECT DISTINCT ID FROM table)
CZechBoY
Profil
DISTINCT ale vrací výsledky jen jednou, nemůže vrátit 2 stejný výsledky..
zkus
SELECT * FROM tabulka t1 WHERE (SELECT COUNT(1) FROM tabulka t2 WHERE t2.nazev=t1.nazev)>1
okolojdouci
Profil *
Měl jsem tam chybu.

SELECT sloupec FROM tabulka WHERE ID NOT IN (SELECT ID FROM tabulka GROUP BY sloupec ) GROUP BY sloupec
xlifer
Profil
okolojdouci:

A to ID je myšleno jako primary key?
okolojdouci
Profil *
xlifer:
Ano. Úvaha je asi taková:

1. vyber všechno, seskup podle "sloupec"
2. toto odečti ze skupiny, kde je úplně všechno

Co zbyde? To, co v té skupině "všechno" mělo hodnotu "sloupec" víc než jednou

3. seskup podle "sloupec"

Výsledkem jsou všechny hodnoty "sloupec", které v té tabulce jsou víc než jednou.
xlifer
Profil
Díky za obě řešení, fungují, ale zajímavé je, že řešení od CZechBoY vypíše přesně jednou tolik záznamu co řešení od okolojdouci. Teď je otázka, které funguje správně... To zatím nevím, protože projít db ručně a zkontrolovat výsledky je teda dosti náročné při 5tis. záznamech :-(

SELECT * FROM tabulka t1 WHERE (SELECT COUNT(1) FROM tabulka t2 WHERE t2.nazev=t1.nazev)>1


vypise 24 zaznamu

SELECT sloupec FROM tabulka WHERE ID NOT IN (SELECT ID FROM tabulka GROUP BY sloupec ) GROUP BY sloupec 


vypise 12 zaznamu
jenikkozak
Profil
xlifer:
Není to tím, že první řešení vypíše v případě, že sloupec obsahuje dvě totožné hodnoty, oba dva řádky, zatímco druhé řešení vypíše pouze jednu?

To druhé je tedy ekvivalentní pro dotaz bez subvýrazu (tedy dotaz rychleji zpracovatelný):
SELECT *, COUNT(*) as pocet FROM tabulka GROUP BY sloupec HAVING pocet>1
xlifer
Profil
jenikkozak:

Ano, je to tak, neuvědomil jsem si to, až teď..

Takže řešení od okolojdouci je naprosto OK a korektní, ale pravda moc svižné zpracování dotazu to není a chvilku to trvá. Otázka je jak by to šlo optimalizovat na rychlejší provedení? (zda je vůbec možné)
Kajman_
Profil *
select t.*
from   tabulka t
join   (select sloupec from tabulka group by sloupec having count(*) > 1) d
on     t.sloupec = d.sloupec

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:

0