Förhindra dubletter?

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
marcusgarden



Medlem i: 3574 dagar

Status: Offline



#742720
Inlägg Skrivet: 2020-01-29 10:14      Ämne: Förhindra dubletter? Citera

Hej!

Hittar inte rätt svar då jag inte får till det:/

Jag har två tabeller i min db.

Tabellen innehåller rader med mailadresser, stad, ålder (och lite annat).

Jag vill föra över mailadresser från tabell1 till tabell2, det ska bara väljas ut unika mailadresser OCH samma mailadress ska kopplas med stad och ålder.

Tabell1 kan ha dubbletter av allt. Tabell2 ska ha unika mailadreser för stad och ålder.

Tabell2 ska sedan uppdateras med nya adresser som stoppas in i tabell1, alltså efter 1 månad kan det ha kommit in 100 nya mailadresser till tabell1, dessa ska då överföras till tabell2 med unika rader för mailadress, stad, ålder. Alltså alla 3 parametrar ska tillsammans vara unika.

Alltså om jag har i tabell1

min@mail.se, sthlm, 28
min@mail.se, gbg, 28
min@mail.se, malmö, 28
min@mail.se, sthlm, 27
min@mail.se, sthlm, 28

så vill jag ha en query för att föra över till tabell2, kvar ska vara

min@mail.se, sthlm, 28
min@mail.se, gbg, 28
min@mail.se, malmö, 28
min@mail.se, sthlm, 27

Hur gör jag det?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
LimpanDSS



Medlem i: 2804 dagar
Från: Stockholm
Status: Offline



#742722
Inlägg Skrivet: 2020-01-30 16:33      Ämne: Re: Förhindra dubletter? Citera

Detta borde funka:

KOD:
1:
 
2:
INSERT INTO tabell2(mail, stad, ålder) SELECT mail, stad, ålder FROM (
3:
   SELECT * FROM (
4:
      SELECT mail, stad, ålder,  ROW_NUMBER() OVER(PARTITION BY mail,
5:
      stad, ålder ORDER BY ålder) as rw FROM tabell1
6:
   ) st WHERE st.rw=1
7:
)
8:
 


Antar att du använder MySQL.

Den använder en WINDOW function som numrerar alla rader med samma (mail, stad, ålder). Således genom att hämta ut varje första element i varje grupp så får vi bort alla dubletter.

Vissa DBMS (typ POSTGRESQL) har en funktion där man kan använda DISTINCT över delmängder av komponenter, istället för att bara göra det på en. Då hade du kunnat göra:


KOD:
1:
 
2:
INSERT INTO tabell2(mail, stad, ålder) SELECT DISTINCT(mail, stad, ålder), ..., .... FROM tabell1
3:
 
 

_________________
Github
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marcusgarden



Medlem i: 3574 dagar

Status: Offline



#742724
Inlägg Skrivet: 2020-03-04 12:51      Ämne: Citera

Ok, tackar, ska prova det!

Men om jag nu redan har dubbletter i min redan befintliga tabell, hur tar jag bort dem?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic