[MySQL] mehrfache einträge entfernen

TimN

Erfahrenes Mitglied
Hallo, ich habe folgendes Problem:
(MySQL)

ich habe 2 tabellen:
buecher (id, nummer)
bestellungen (id, buch)

In "bestellungen.buch" steht die ID des buches, das bestellt werden soll.
In der Tabelle buecher kann es vorkommen, dass es die selbe Nummer mehrfach gibt.

Jetzt muss ich es irgendwie hinbekommen, dass die buch ID bei den bestellungen bei doppelten nummern duch eine von beiden ersetzt wird. Ist schwer zu erklären...
Ich schreib einfach mal ein Beispiel:

vorher:
Code:
buecher:
id | nummer
-----------------
1 | 123-456
2 | 456-789
3 | 123-456
 
bestellungen:
id | buch
------------
1 |   1
2 |   1
3 |   3

nachher:
Code:
buecher: (bleibt unverändert)
id | nummer
-----------------
1 | 123-456
2 | 456-789
3 | 123-456
 
bestellungen:
id | buch
------------
1 |   1
2 |   1
3 |   1   <= HIER hat sich etwas geändert

Ich hoffe, dass es durch das Beispiel einigermaßen verständlich wurde...
Wie kann ich das jetzt so hinbekommen?

Gruß,
Tim
 
Hallo,

versuch es mal hiermit:
Code:
UPDATE `bestellungen` `outer`
SET `buch` = (
  SELECT MIN(`b2`.`id`)
  FROM `buecher` `b1`
  LEFT JOIN `buecher` `b2` USING (`nummer`)
  WHERE `b1`.`id` = `outer`.`buch`
)

Grüße,
Matthias
 
Danke für die Antwort, aber was ist b1 und b2?
Weil einfach so funktioniert es nicht:
Code:
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MIN(`b2`.`id`)
  FROM `test_buecher` `b1`
  LEFT JOIN

muss ich da noch irgendwas ersetzten?
 
Hallo,

b1 und b2 sind Aliase für beiden Referenzen auf die Tabelle buecher im Subquery. Anscheinend unterstützt deine MySQL-Version (< 4.1) keine Subquerys. Das macht das ganze leider etwas komplizierter… mal sehen, ob man das auch ohne hinbringt.

Grüße,
Matthias
 
Hallo,

so könnte es klappen:
Code:
UPDATE `bestellungen`
INNER JOIN `buecher` `b1` ON (`b1`.`id` = `bestellungen`.`buch`)
INNER JOIN `buecher` `b2` ON (`b2`.`nummer` = `b1`.`nummer`)
LEFT JOIN `buecher` `b3` ON (`b3`.`id` < `b2`.`id` AND `b3`.`nummer` = `b2`.`nummer`)
SET `bestellungen`.`buch` = `b2`.`id`
WHERE `b3`.`id` IS NULL

Grüße,
Matthias
 
Zurück