Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL update mit Daten aus anderer Tabelle

1,455 views
Skip to first unread message

Jens Meißner

unread,
Aug 30, 2008, 2:18:54 AM8/30/08
to
Hallo Gruppe,

ich habe einen SQL-Script, welcher regelmäßig durch einen Cronjob
ausgeführt wird, und dafür sorgen soll, das die Daten aus einer
Datenbank mit denen einer anderen kombiniert und dort eingetragen werden
sollen.

Dazu führe ich mehrere Befehle der Art

update `db2`.`table` set `feld` = (select `feld` from `db1`.`table`
where `db2`.`table`.`name` = `db1`.`table`.`name` and
`db2`.`table`.`vorname` = `db1`.`table`.`vorname`);

aus.

Problem ist, das ich das mit mehreren Spalten machen muss, und jedenmal
die Unterabfrage neu ausgeführt wird. Wie kann ich das effizienter
Gestalten?
Danke für alle sachdienlichen Hinweise.

Gruß
Jens

Stephan Menzel

unread,
Aug 30, 2008, 4:40:24 AM8/30/08
to
Hallo,

Man kann die tabellen in der UPDATE Anweisung verbinden

UPDATE `db2`.`table`, `db1`.`table`
SET `db2`.`table`.`feld1`=`db1`.`table`.`feld1`,
`db2`.`table`.`feld2`=`db1`.`table`.`feld2`
WHERE `db2`.`table`.`name`=`db1`.`table`.`name` AND
`db2`.`table`.`vorname`=`db1`.`table`.`vorname`;

sollte das aber über einen Index laufen lassen, wegen eindeutiger
Zuweisung weil könnt ja zwei mit gleichen Namen geben, außer es ist so
gewollt!!

Man kann auch INSERT INTO mit ON DUPLIKATE KEY dann verbinden um zum
beispiel noch nicht vorhandene mit zu übernehmen:

INSERT INTO `db2`.`table`
(`Index`, `name`, `vorname`, `feld1`, `feld2`)
SELECT `db1`.`table`.`Index`, `name`, `vorname`, `feld1`, `feld2`
FROM `db1`.`tablel`
ON DUPLICATE KEY UPDATE `db2`.`table`.`feld1`=`db1`.`table`.`feld1`,
`db2`.`table`.`feld1`=`db1`.`table`.`feld1`;


>
>Gruß
>Jens

cu Stephan

Jens Meißner

unread,
Aug 30, 2008, 7:36:11 AM8/30/08
to
Stephan Menzel schrieb:
> Hallo,

>
> Man kann die tabellen in der UPDATE Anweisung verbinden
>
> UPDATE `db2`.`table`, `db1`.`table`
> SET `db2`.`table`.`feld1`=`db1`.`table`.`feld1`,
> `db2`.`table`.`feld2`=`db1`.`table`.`feld2`
> WHERE `db2`.`table`.`name`=`db1`.`table`.`name` AND
> `db2`.`table`.`vorname`=`db1`.`table`.`vorname`;
>
> sollte das aber über einen Index laufen lassen, wegen eindeutiger
> Zuweisung weil könnt ja zwei mit gleichen Namen geben, außer es ist so
> gewollt!!
>
> Man kann auch INSERT INTO mit ON DUPLIKATE KEY dann verbinden um zum
> beispiel noch nicht vorhandene mit zu übernehmen:
>
> INSERT INTO `db2`.`table`
> (`Index`, `name`, `vorname`, `feld1`, `feld2`)
> SELECT `db1`.`table`.`Index`, `name`, `vorname`, `feld1`, `feld2`
> FROM `db1`.`tablel`
> ON DUPLICATE KEY UPDATE `db2`.`table`.`feld1`=`db1`.`table`.`feld1`,
> `db2`.`table`.`feld1`=`db1`.`table`.`feld1`;

Vielen Dank

Jens

0 new messages