Mailinglisten-Archive |
Ich habe diese beiden Beispieltabellen: # # Table structure for table 'dom' # CREATE TABLE dom ( id int(11), domain varchar(127) ); # # Dumping data for table 'dom' # INSERT INTO dom VALUES (1,'netuse.de'); INSERT INTO dom VALUES (2,'koehntopp.de'); # # Table structure for table 'host' # CREATE TABLE host ( ip varchar(16), hostname varchar(127), id int(11) ); # # Dumping data for table 'host' # INSERT INTO host VALUES ('193.98.110.1','nuki.netuse.de',0); INSERT INTO host VALUES ('193.102.57.4','white.koehntopp.de',0); INSERT INTO host VALUES ('192.102.57.3','valiant.koehntopp.de',0); Ich muß eine große Menge externe Daten in die "host"-Tabelle laden (etwa 7200 Domains mit entsprechend mehr Rechnern). Ich kann bereits erfolgreich den folgenden Join ausführen, der genau das tut, was ich möchte (nur sehr langsam ist): mysql> select concat("%.", dom.domain) as bla from dom; +----------------+ | bla | +----------------+ | %.netuse.de | | %.koehntopp.de | +----------------+ 2 rows in set (0.00 sec) mysql> select dom.id, domain, hostname from dom, host where host.hostname like concat("%.", dom.domain); +------+--------------+----------------------+ | id | domain | hostname | +------+--------------+----------------------+ | 1 | netuse.de | nuki.netuse.de | | 2 | koehntopp.de | white.koehntopp.de | | 2 | koehntopp.de | valiant.koehntopp.de | +------+--------------+----------------------+ 3 rows in set (0.01 sec) Der Join ist langsam, weil er mit Pattern Matching mit führendem Wildcard arbeitet, also durch Indices nicht beschleunigt werden kann. ch möchte jetzt "id"-Werte in "host" so berechnen, daß sie stattdessen als foreign key zum Join verwendet werden können. Mein Versuch: mysql> update host set host.id = dom.id > where host.hostname like concat("%.", dom.domain); ERROR 1109: Unknown table 'dom' in field list Das scheitert also am "host.id = dom.id"-Part der Query. Wir kann ich die host.id-Werte korrekt berechnen, sodaß ihre Werte gemäß den dom.id-Werten gesetzt werden. Mir ist klar, daß es eine Prozedurale Lösung gibt. Die Frage ist: Gibt es eine SQL-Lösung für dieses Problem? Wenn nein, warum nicht? Kristian -- Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.shonline.de/ (GPL)
php::bar PHP Wiki - Listenarchive