[Sqlite3] Alle Duplicates -1 weergeven (min of max)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • menn0
  • Registratie: Augustus 2000
  • Laatst online: 18:42
Ik heb de volgende tabel;
code:
1
2
3
4
5
6
7
8
A   B   C       Value        E
1   1   movie   tt2420006   imdb
2   2   movie   tt2024544   imdb
3   3   movie   tt1335975   imdb
4   4   movie   tt1972571   imdb
5   5   movie   tt2312890   imdb
6   6   movie   tt2226283   imdb
7   7   movie   tt2325517   imdb


Ik wil alle duplicates in kolom 'Value' vangen, voor de output mag er 1 overblijven.
Dus zijn er 2 duplicates, dan wil ik 1 regel terug krijgen, zijn er 3 duplicates dan wil ik 2 regels terugkrijgen.
De output is de input voor een delete query op een andere tabel die de identifier in kolom B (mediaID) deelt.
Het hoeft geen grote all in one query te worden waarbij beiden tabellen betrokken zijn.

Wat ik heb geprobeerd en maar deels werkt is;
select media_id
from uniqueid
group by value
having count(*) > 1

Deze query geeft bij meer dan 2x dezelfde waarde in Value er maar 1 terug

Acties:
  • 0 Henk 'm!

  • OneMoreThing
  • Registratie: Mei 2010
  • Nu online
Ik ben niet zo goed in Sqlite3 maar ik zou dit eens proberen:

select value, count(*)
from uniqueid
group by value
having count(*)>1

[ Voor 2% gewijzigd door OneMoreThing op 30-03-2018 17:32 . Reden: Niet goed gelezen ]


Acties:
  • +1 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Ik begrijp eerlijk gezegd niet helemaal wat je wil.

Je hebt in je query kolomnamen als "media_id", "uniqueid" etc.
Maar in je voorbeeld zijn het kolom "A", "B" etc.

Welke is wat? Wat wil je precies bij elkaar hebben? Je wil 1 rij minder dan het aantal duplicates?
Kun je misschien even de verwachte output geven van het voorbeeld wat je hierboven geeft?

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Misschien moet je even je hele case uitleggen ipv alleen dit onderdeeltje. Je krijgt dit niet voor elkaar met een enkele query dus misschien zijn er handigere oplossingen....

Acties:
  • +1 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 16:58

Kees

Serveradmin / BOFH / DoC
Het voorbeeld dat je geeft bestaat uit allemaal unieke waardes, geef eens een voorbeeld met daarin dubbele waardes en/of driedubbele waardes en wat je er dan uit wil krijgen?

Overigens zou iets als dit moeten werken als ik je goed snap;

SQL:
1
2
3
4
5
6
7
SELECT media_id 
FROM uniqueid 
WHERE media_id NOT IN (
    SELECT MIN(media_id) -- min() is optioneel
    FROM uniqueid 
    GROUP BY value
)

Dus selecteer eerst 1 id voor alle unieke values en daarna selecteer je alles wat daar niet in voorkomt.

[ Voor 5% gewijzigd door Kees op 10-04-2018 17:28 ]

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • Hopscotch
  • Registratie: September 2015
  • Laatst online: 28-09-2021
Volgens mij wil TS duplicaten verwijderen zodat er per unieke waarde ook daadwerkelijk maar 1 rij in de tabel staat. Met de query die je al hebt zonder de having heb je eigenlijk wat je over wilt houden, dus je zou een delete where not in en dan die subquery kunnen doen.

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 06:21
Hopscotch schreef op donderdag 12 april 2018 @ 10:36:
Volgens mij wil TS duplicaten verwijderen zodat er per unieke waarde ook daadwerkelijk maar 1 rij in de tabel staat. Met de query die je al hebt zonder de having heb je eigenlijk wat je over wilt houden, dus je zou een delete where not in en dan die subquery kunnen doen.
Niet helemaal, hij selecteert niet de values die maar eenmaal voorkomen, die zou je dan ook verwijderen. De having is niet nodig, je wil iets zoals @Kees aangeeft, met de min(id) zodat je alles behalve die kan verwijderen, en die vind je dan door te groupen op de kolom die je als uniek wil beschouwen.
Pagina: 1