MySQL Delete FROM WHERE X IN (SELECT FROM)

Tags:    mysql

Hejsa, jeg har en productdatabase hvor flere leverandører er indlæst.

i denne database optræder der både dubletter og unikke værdier, jeg ønsker dog kun at beholde alle dubletterne undtagen den med billigste pris...

jeg har fx. denne query
Fold kodeboks ind/udSQL kode 


denne giver mig umiddelbart listen over dubletter, hvor den gruppere og lister den med billigste kostpris.

jeg ønsker så at slette alle de rækker som kommer som resultat fra ovenstående query (hvis querien overhovedet er rigtig ?)

jeg har prøvet:

DELETE FROM productlist_complete WHERE producent_varenr IN (SELECT producent_varenr, MIN(kostpris) FROM ps_productlist_complete GROUP BY producent_varenr)

problemet er at Select query jo laver 2 rækker og IN querien forventer kun 1 række..

det jeg ønsker er faktisk at tabellen ender med at være modsat af "Distinct" :-)

for illustration:

databasen indeholder dette:

Varenr, pris
HP2840, 3999
HP2840, 2800
HP2840, 3499
HP2600, 3000

jeg ønsker så at ende op med kun disse (billigste dublet fjernet og unik record fjernet):
HP2840, 3999
HP2840, 3499




Indlæg senest redigeret d. 18.01.2012 17:57 af Bruger #5395
2 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Normalt gør man det at man laver en "select into" dvs. du indsætter de id, på dem du vil slette/ikke slette i en ny tabel og så laver du en delete hvor du joiner mod den tabel og sletter dem der enten har en match eller ikke en match (left/right join)



Der findes ikke en direkte slags "DELETE DISTINCT" ?
det ville jo faktisk være præcis det jeg er ude efter..



t