Wie kopiere ich bestimmte Datensätze

Wie kopiere ich bestimmte Datensätze

am 01.10.2007 12:10:48 von Knut Krueger

sorry
ich hatte den Beitrag gleich zurückgezogen, weil ich etwas in google
gefunden habe. Nun ist eine Antwort drauf da - ohne Beitrag ...
Also hier nochmal der Beitrag:

Hallo zusammen,
ich müsste aus einer Tabelle eine neue Tabelle füllen.
Beide sind in einer Datenbank angelegt, und die neue Tabelle enthält
auch schon Werte. Wenn nötig könnte ich diese paar Werte löschen

Gibt es eine einfache Möglichkeit dies mit SQL Befehl zu machen.
Ich weiß nur wie ich einen Wert aus einer Stelle auslesen kann und in
eine andere vorhandene schreiben kann, aber nicht wie ich
auslesen/auswählen und in einen neuen Datensatz schreiben kann.


Das Feld Distance z.B ist in der alten Tabelle int in der neuen small
int. Der größte Wert ist derzeit 30.000 in der alten Tabelle. Das würde
reichen.

Eventuell kann mir jemand einen Tip geben ;-)

Viele Grüße Knut

Alte Tabelle

CREATE TABLE `pireps` (
`ivaoid` int(11) NOT NULL default '0',
`legnr` int(11) NOT NULL default '0',
`rules` varchar(10) NOT NULL default '',
`callsign` varchar(10) NOT NULL default '',
`flightnr` varchar(10) NOT NULL default '',
`aircraft` varchar(10) NOT NULL default '',
`distance` int(11) NOT NULL default '0',
`date` date NOT NULL default '0000-00-00',
`enroute` int(11) NOT NULL default '0',
`departure` varchar(4) NOT NULL default '',
`arrival` varchar(4) NOT NULL default '',
`alternativ` varchar(4) NOT NULL default '',
`landed` varchar(4) NOT NULL default '',
`takeoff` time NOT NULL default '00:00:00',
`land` time NOT NULL default '00:00:00',
`alt` int(11) NOT NULL default '0',
`fuel` int(11) NOT NULL default '0',
`tas` int(11) NOT NULL default '0',
`status` varchar(10) NOT NULL default '',
`route` text NOT NULL,
`atcpoints` int(11) NOT NULL default '0',
`atc` varchar(255) NOT NULL default '',
`atctyp` set('D','A') default NULL,
PRIMARY KEY (`ivaoid`,`legnr`),
KEY `status` (`status`)
) TYPE=MyISAM;

neue Tabelle
CREATE TABLE `reports` (
`report_id` int(11) NOT NULL auto_increment,
`pilot_id` varchar(15) NOT NULL default '0',
`date` date NOT NULL default '0000-00-00',
`time` time NOT NULL default '00:00:00',
`callsign` varchar(10) default NULL,
`origin_id` varchar(4) NOT NULL default '0',
`destination_id` varchar(4) NOT NULL default '0',
`registration` varchar(10) default NULL,
`equipment` varchar(10) default NULL,
`duration` time NOT NULL default '00:00:00',
`fuel` smallint(6) NOT NULL default '0',
`distance` smallint(6) NOT NULL default '0',
`fsacars_rep_url` text NOT NULL,
PRIMARY KEY (`report_id`),
UNIQUE KEY `report_id` (`report_id`),
UNIQUE KEY `xpk_reports` (`report_id`),
KEY `xi_reports` (`pilot_id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 12:21:27 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 13:32:55 von Knut Krueger

Andreas Kretschmer schrieb:
> begin Knut Krueger schrieb:
>> sorry
>> ich hatte den Beitrag gleich zurückgezogen, weil ich etwas in google
>
> Ist die Frage damit beantwortet?

Nein leider nicht.
Ich denke ich formatiere den SQL dupm mit Excel um und lese ihn neu ein.
Ich muss in fast 5000 Datensätzen z.B Minuten in Stunde/Minuten
umrechnen. Das wird wohl nicht SQL gehen.
Viele Grüße Knut

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 13:52:04 von dnoeth

Knut Krueger wrote:

> Ich denke ich formatiere den SQL dupm mit Excel um und lese ihn neu ein.
> Ich muss in fast 5000 Datensätzen z.B Minuten in Stunde/Minuten
> umrechnen. Das wird wohl nicht SQL gehen.

Lass mal sehen: Spalte / 60 und Rest der ganzzahligen Division, neee,
das gibt's wohl nicht in SQL.

Dieter

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 13:57:31 von Christian Kirsch

Am 01.10.2007 13:32 schrieb Knut Krueger:
> Andreas Kretschmer schrieb:
>> begin Knut Krueger schrieb:
>>> sorry
>>> ich hatte den Beitrag gleich zurückgezogen, weil ich etwas in google
>> Ist die Frage damit beantwortet?
>
> Nein leider nicht.

Warum nicht? Du wolltest doch wissen, wie Du Daten von A nach B
kopierst. Daraufhin hat Dir Andreas das Handbuch vorgelesen, und zwar
den Abschnitt
INSERT INTO B (bla, fasel) SELECT FROM A bla_alt, fasel_alt

> Ich denke ich formatiere den SQL dupm mit Excel um und lese ihn neu ein.

Das könnte man machen. Man könnte ihn auch erstmal ausdrucken, das
Ergebnis dann einscannen und nach Verarbeitung mit einem OCR-Programm
in Excel weiterverarbeiten.

Man könnte auch gleich richtige Tools benutzen, aber das wäre
natürlich nicht halb so farbenfroh:

man sed
man awk
man perl


> Ich muss in fast 5000 Datensätzen z.B Minuten in Stunde/Minuten
> umrechnen. Das wird wohl nicht SQL gehen.

Weil SQL nicht dividieren kann und keine Modulo-Operation kennt? Oder
weil es schlagartig nach 4999 Datensätzen vergisst, wie das geht?
Du solltest entweder Dein SQL aktualisieren oder Deine Kenntnisse
davon. Dabei könne ein ausdauernder Blick ins Handbuch helfen. Du
findest es bei dev.mysql.com/doc

--
Christian

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 14:06:00 von Knut Krueger

Dieter Noeth schrieb:
> Knut Krueger wrote:
>
>> Ich denke ich formatiere den SQL dupm mit Excel um und lese ihn neu ein.
>> Ich muss in fast 5000 Datensätzen z.B Minuten in Stunde/Minuten
>> umrechnen. Das wird wohl nicht SQL gehen.
>
> Lass mal sehen: Spalte / 60 und Rest der ganzzahligen Division, neee,
> das gibt's wohl nicht in SQL.
>
> Dieter
Ist zwar ein bisschen im Kreis herum, aber es geht:
Export der alten Daten in Excel
Mit Excel Die Spalten sortieren, umrechnen, Suchen und Ersetzten
Erste Spalte ( und letzte Spalte ) einfügen
Als CSV speichern - Mit einem Editor mit suchen und ersetzen ; in ';'
wandlen.
Wieder in Excel und aus bestimmten Spalten die ' wieder heraus,
zurück in den Editor nach ( und vor ) das ; wieder weg
einfügen von Insert Into'reports' Values , abspeichern und
Einlesen:
Funktioniert ;-)

Grüße Knut


Grüße KNut

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 14:07:17 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 14:37:21 von Knut Krueger

Andreas Kretschmer schrieb:
> begin Knut Krueger schrieb:
>> Andreas Kretschmer schrieb:
>>> begin Knut Krueger schrieb:
>>>> sorry
>>>> ich hatte den Beitrag gleich zurückgezogen, weil ich etwas in google
>>> Ist die Frage damit beantwortet?
>> Nein leider nicht.
>> Ich denke ich formatiere den SQL dupm mit Excel um und lese ihn neu ein.
>
> Tu, was Du für richtig hälst.
>
>
>> Ich muss in fast 5000 Datensätzen z.B Minuten in Stunde/Minuten
>> umrechnen. Das wird wohl nicht SQL gehen.
>
> Warum sollte das _nicht_ gehen?
>
> Folgendes ist zwar PostgreSQL, aber auch in MySQL kann man sich
> Funktionen schreiben, das sollte also trivial in MySQL nachvollziehbar
> sein:
>
>
> test=# create or replace function minutes2interval(int) returns interval as $$ begin return ($1/60 || ':' || $1%60 || ':00')::interval; end$$ language plpgsql;
> CREATE FUNCTION
> test=*# select minutes2interval(150);
> minutes2interval
> ------------------
> 02:30:00
> (1 row)
>
> Und, damit kann man sogar weiter rechnen:
> test=*# select minutes2interval(150) + '1 hour 5 minutes 10seconds'::interval;
> ?column?
> ----------
> 03:35:10
> (1 row)
>
>
>
> Wenn Du Excel brauchst, um Minuten in Stunden/Minuten umzurechnen,
> dann brauchst Du einklich auch keine DB...
>
>
Ich habe fast keine SQL Erfahrung, muss aber die Daten umgewandelt in
eine neue Tabelle bringen.
Dazu habe ich ca 10 Minuten gebraucht

Grüße Knut
Dazu habe ich

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 15:48:52 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 16:10:59 von Knut Krueger

Andreas Kretschmer schrieb:
> begin Knut Krueger schrieb:
>>> Wenn Du Excel brauchst, um Minuten in Stunden/Minuten umzurechnen,
>>> dann brauchst Du einklich auch keine DB...
>>>
>>>
>> Ich habe fast keine SQL Erfahrung, muss aber die Daten umgewandelt in
>> eine neue Tabelle bringen.
>
> Warum fragst Du dann einklich erst in einer SQL-Newsgroup? Warum
> verwendest Du überhaupt eine SQL-Datenbank, wenn Du trivialste Dinge
> dann doch über Lösungswege realisierst, die nicht einmal entfernt etwas
> mit einer DB zu tun haben?
>
>
>> Dazu habe ich ca 10 Minuten gebraucht
> Andreas Kretschmer schrieb:

> Wenn Du Excel brauchst, um Minuten in Stunden/Minuten umzurechnen,
> dann brauchst Du einklich auch keine DB...

Nicht dass ich damit meine es wäre der beste Weg.
sicherlich ist es besser zu lernen wie das mit SQL geht.
Nur habe ich dazu gerade keine Zeit.
Ich kann Daten abfragen, Daten durch andere ersetzten
z.B. HEV116 durch 116,
aber das ganze war eben doch etwas mehr als einzelne separate Befehle.
Und.. ich wollte hier niemandem die Arbeit machen mir den gesamten Weg
darzulegen, als ich festgestellt habe dass es wohl nicht mit einem
einzigen Befehl geht.
Ich würde mich riesig freuen, wenn hier jemand anhand meines Beispieles
einen nachzuvollziehenden Workshop aufmacht. Aber dazu ist ja wohl eine
Ng nicht da.
Und wie schon gesagt, ich hätte Stunden dazu benötigt anstatt Minuten
und die habe ich eben gerade nicht. Ich wusste bis vor einem Tag noch
nicht einmal dass ich an dieser Datenbank was ändern muss. Das war ein
Hilferuf

Viele Grüße Knut

Grüße Knut

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 16:24:53 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 17:52:25 von Daniel Fischer

Andreas Kretschmer!

> Folgendes ist zwar PostgreSQL, aber auch in MySQL kann man sich
> Funktionen schreiben, das sollte also trivial in MySQL nachvollziehbar
> sein:

Mir fäll auf, dass du immer wieder betonst, wieviel Aufwand man in
PostgreSQL mit solchen einfachen Dingen hast. Lass das bitte hier; wenn du
dich über PostgreSQL beschweren willst, dann gibt es dafür geeignetere
Gruppen.

> test=# create or replace function minutes2interval(int) returns interval
> as $$ begin return ($1/60 || ':' || $1%60 || ':00')::interval; end$$
> language plpgsql; CREATE FUNCTION
> test=*# select minutes2interval(150);
> minutes2interval
> ------------------
> 02:30:00
> (1 row)


mysql> select sec_to_time(150*60);
+---------------------+
| sec_to_time(150*60) |
+---------------------+
| 02:30:00 |
+---------------------+


Gruß
Daniel

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 18:09:04 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 18:28:29 von Knut Krueger

Andreas Kretschmer schrieb:
> begin Knut Krueger schrieb:
>>> Wenn Du Excel brauchst, um Minuten in Stunden/Minuten umzurechnen,
>>> dann brauchst Du einklich auch keine DB...
>> Nicht dass ich damit meine es wäre der beste Weg.
>> sicherlich ist es besser zu lernen wie das mit SQL geht.
>
> Ja.
>
>
>> Nur habe ich dazu gerade keine Zeit.
>
> Dann hast Du morgen schon das nächste Problem und suchst wieder einen
> würgaround...
>
>
>> Ich kann Daten abfragen, Daten durch andere ersetzten
>> z.B. HEV116 durch 116,
>> aber das ganze war eben doch etwas mehr als einzelne separate Befehle.
>> Und.. ich wollte hier niemandem die Arbeit machen mir den gesamten Weg
>> darzulegen, als ich festgestellt habe dass es wohl nicht mit einem
>> einzigen Befehl geht.
>
> test=*# create table quelle (minuten int);
> CREATE TABLE
> test=*# create table ziel (zeit interval);
> CREATE TABLE
> test=*# commit;
> COMMIT
> test=# insert into quelle values(1);
> INSERT 0 1
> test=*# insert into quelle values(10);
> INSERT 0 1
> test=*# insert into quelle values(100);
> INSERT 0 1
> test=*# insert into quelle values(1000);
> INSERT 0 1
> test=*# commit;
> COMMIT
> test=# insert into ziel(zeit) select (minuten/60 || ':' || minuten%60 || ':00')::interval from quelle;
> INSERT 0 4
> test=*# select * from ziel;
> zeit
> ----------
> 00:01:00
> 00:10:00
> 01:40:00
> 16:40:00
> (4 rows)
>
> Deine Zielstellung, Daten von einer Tabelle in eine andere zu bringen
> und gleichzeitig auf diesem Weg zu konvertieren, geht, wie man sehen
> kann, in einem Befehl. Ganz easy.
>
>
>> Ich würde mich riesig freuen, wenn hier jemand anhand meines Beispieles
>> einen nachzuvollziehenden Workshop aufmacht. Aber dazu ist ja wohl eine
>> Ng nicht da.
>
> Der füllt dann grad mal 3 Sekunden...
Darf ich dann mal den gesamten Workflow darstellen den ich gebraucht
habe und darf ich dann, wenn Du mir erklärt hast wie es geht, auch dumme
Fragen stellen?

Viele Grüße Knut

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 19:37:41 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 19:51:12 von Knut Krueger

Andreas Kretschmer schrieb:
> begin Knut Krueger wrote:
>>> Der füllt dann grad mal 3 Sekunden...
>> Darf ich dann mal den gesamten Workflow darstellen den ich gebraucht
>> habe und darf ich dann, wenn Du mir erklärt hast wie es geht, auch dumme
>> Fragen stellen?
>
> Erst einmal lernst Du, was Fullquote ist und warum man das nicht macht.
>
Andreas, was soll ich jetzt darauf antworten.

Möglichkeit 1
Lerne erstmal googeln um zu suchen wie oft mir in den letzten 10 Jahren
ein Fullqoute passiert ist?
Eventuell suchst du auch noch die alten Compuserve Archive durch, falls
es die noch gibt, dann kommst du auf mindestens 15 Jahre

Möglichkeit 2
Als ich mit dem Usennet angefangen habe wirst Du noch nicht einmal
gewusst haben was ein Computer ist. Da war der Tonfall noch ganz anders.
Schöne Zeiten waren das, wo das Usenet noch ein gegenseitiges Helpdesk war.

Möglichkeit 3
naja irgendetwas anderes OT im gleichen Tonfall wie Du.

Möglichkeit 4
Entschuldige bitte mein Fullqoute, das passt aber nicht zu Deinem Tonfall

Alles unnützes Zeug, denn können sich andere Popcorn zulegen und sich an
unserem Streit freuen.

Also was ist Dir lieber sachlich weiter zu diskutieren oder möchtest du
einen der Vorschläge 1-3 annehmen.


Viele Grüße Knut

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 20:40:09 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Wie kopiere ich bestimmte Datensätze

am 01.10.2007 21:33:04 von Knut Krueger

Andreas Kretschmer schrieb:
> begin Knut Krueger wrote:
>>> Erst einmal lernst Du, was Fullquote ist und warum man das nicht macht.
>>>
>> Andreas, was soll ich jetzt darauf antworten.
>
> Nix. Es war keine Frage.

>
>> Möglichkeit 1
>> Lerne erstmal googeln um zu suchen wie oft mir in den letzten 10 Jahren
>> ein Fullqoute passiert ist?
>
> Wozu googeln? In diesem Thread mehrfach.
um festzustellen ob ich vielleicht nur eine sehr stressigen Tag habe -
ich arbeite immer noch ... und sollte mit diesem unnützen Tread aufhören
um fertig zu werden.

>
> Ich bastelte meinen ersten Computer, als es Usenet noch nicht gab. Naja,
> nicht ganz, aber fast. Falls Dir Begriffe wie Z80, U880, Assembler was
> sagen. Was ich bezweifle.
Aber klar doch, mit Z80 habe ich kommerzielle Programm in Assembler
programmiert und dann sogar einen Pascal Compiler drauf zum laufen
gebracht.

>
>
>> Möglichkeit 3
>> naja irgendetwas anderes OT im gleichen Tonfall wie Du.
>
> Fehlende Argumente? Kann passieren.
>
nicht doch, es gibt auch User die wollen doch höflich bleiben
>
>> Möglichkeit 4
>> Entschuldige bitte mein Fullqoute, das passt aber nicht zu Deinem Tonfall
>
> Wie jetzt?
Naja es fällt doch schwerer auf so einen Tonfall sich zu entschuldigen.
Aber wenn du es wolltest, hättest Du dir dir die Möglichkeit 4 aussuchen
könne. Wolltest du scheinbar nicht...

Und was wolltest Du eigentlich damit bezwecken - den Traffic zu
minimieren, hast aber deutlich mehr verursacht durch die letzten Beiträge.

Viele Grüße Knut