Autor Zpráva
RomikTronik
Profil *
Potřebuji vybrat řádky, které nemají unikátní mail. Zkusil jsem

SELECT *
FROM `uzivatele`
GROUP BY mail
HAVING COUNT( mail ) >1


to funguje, ale já potřebuju aby mi to zobrazilo všechny řádky ve kterých není unikátní mail. Tohle mi ti řádky spojí do jednoho.

tak jsem zkusil

SELECT *
FROM `uzivatele`
GROUP BY id
HAVING COUNT( mail ) >1


to mi vrátilo nulový výsledek.

Můžete mi prosím někdo poradit jak vybrat všechny řádky na kterých není unikátní email, jednotlivě aniž by je spojoval dohromady?
TomášK
Profil
GROUP BY id
pravděpodobně neudělá vůbec nic

SELECT *
FROM uzivatele 
WHERE mail IN (
    SELECT mail
    FROM `uzivatele`
    GROUP BY mail
    HAVING COUNT(*) > 1
    );
RomikTronik
Profil *
děkuju, tohle funguje, ale pouze v případě že ktomu přidám LIMIT 0,5 jinak, pokud chci projit celou tabulku, tak to vyhodí "MySQL server has gone away". Jde to vyřešit nějak lépe? Nebo jak můžu zvýšit timeout?
Tabulka má 100 000 řádků a z toho je tam 10% duplicitních emailů. Takže dotaz vlastně porovnává každý řádek s 10 000 maily....
petr 6
Profil
select count(id), mail from uzivatele group by mail having count(id)>1
RomikTronik
Profil *
petr 6:
to se u každého neunikátního mailu dovím kolikrát tam je, já ale potřebuju aby mi vypsal jednotlivé řádky, protože u dvou stejných emailů jsou jiné loginy a podobné informace
Kajman_
Profil *
Mysql často k podmínkám v in na stejné tabulce nesmyslně přistupuje jako ke korelovaným poddotazům, co se vyhodnocují pro každý řádek. Mělo by stačit přespat to samé do spojení...

SELECT *
FROM   uzivatele
JOIN   (SELECT mail FROM uzivatele GROUP BY mail HAVING COUNT(mail) > 1) duplicitni
ON     uzivatele.mail = duplicitni.mail
RomikTronik
Profil *
Kajman:
Děkuji tobě i ostatním, toto už funguje a je to celkem pěkná finta... sem rád že jsem se zase něco naučil :-)

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