Hallo!
Ich komme direkt zu meinem Problem.
Habe 2 Tabellen in der Mysql-DB.
Tabelle1 = kategorie (INT)
Tabelle2 = katnr (INT), katname (VARCHAR)
Tabelle1.kategorie = Tabelle2.katnr (haben gleiche Zahlenwerte)
Tabelle2.katname >> hier sind viele Kategoriennamen drin, z-B. Auto, Heizung, etc
Nun möchte ich in der Tabelle1 ein neues Feld hinzufügen, und dort den "Tabelle2.katname" importieren. Dabei muss mit den beiden Tabellen verglichen werden. Die bestehenden Zahlen (Tabelle1.kategorie) müssen (Tabelle2.katnr) entsprechen.
Ich hoffe, ich habbs verständlich beschrieben, bin noch Newbie.
Besser wäre, wenn ich direkt in das Feld: Tabelle1.kategorie die Spalten Tabelle2.katname importieren könnte und die Zahlen durch die Kategorienamen ersetzen könnte.
Versucht habe ich es schon mit zahlreichen SQL-statements, aber erfolglos, weiss nicht mehr weiter.
Z.B:
UPDATE Tabelle1 AS t1, tabelle2 AS t2 SET t1.kategorie = t2.katname WHERE
t2.katnr ='t1.kategorie'
Bitte um Tip!
Gruß
Problem mit 2 Tabellen
-
- Posts: 747
- Joined: 2003-03-17 15:32
Re: Problem mit 2 Tabellen
also ich kapiers absolut nicht was du machen willst....
und dein
ist nicht so gelungen da du hier einem INT nen VARCHAR zuweist
und dein
Code: Select all
SET t1.kategorie = t2.katname
-
- Posts: 6
- Joined: 2003-11-17 15:36
Hi
Hi!
Also ich will die Tabelle2 weghaben. Die Kategorien-Namen (VARCHAR) aus der Tabelle2 sollen in der Tabelle1 als neues Feld rein oder man ersetzt den vorhandenen "kategorie"- (INT)-Feld der Tabelle1 direkt durch das Feld "katname" (VARCHAR) der Tabelle2.
muss ich da spezielles Script für basteln oder kann man das mit einfachem Mysql-Statement löscen?
Wenn ich mich unverständlich ausgedrückt habe, werde ich versuchen es noch einfacher zu machen :)
Gruß :-D
Also ich will die Tabelle2 weghaben. Die Kategorien-Namen (VARCHAR) aus der Tabelle2 sollen in der Tabelle1 als neues Feld rein oder man ersetzt den vorhandenen "kategorie"- (INT)-Feld der Tabelle1 direkt durch das Feld "katname" (VARCHAR) der Tabelle2.
muss ich da spezielles Script für basteln oder kann man das mit einfachem Mysql-Statement löscen?
Wenn ich mich unverständlich ausgedrückt habe, werde ich versuchen es noch einfacher zu machen :)
Gruß :-D
-
- Posts: 13
- Joined: 2003-10-21 13:03
- Location: Meerbusch
Re: Problem mit 2 Tabellen
(Ich nehme mal an, in Wirklichkeit hat zumindest Tabelle1 noch mehr Felder - sonst könntest Du die doch einfach löschen und direkt auf Tabelle2 zugreifen)
Das mit dem Update sieht nicht schlecht aus; Du mußt die "Ziel-Spalte" aber auch explizit anlegen:
(die Breite von katname mußt Du natürlich einsetzen, kein Fragezeichen).
Danach sollte das Update gehen - bis auf die Anführungszeichen. r00ty hat Recht: einfach weglassen. So, wie's da steht, würdest du in Tabelle2 nach Zeilen suchen, deren katnr dem Text "t1.kategorie" gleicht - schwer zu finden.
Das mit dem Update sieht nicht schlecht aus; Du mußt die "Ziel-Spalte" aber auch explizit anlegen:
Code: Select all
alter table Tabelle1 add (katname varchar(?));
Danach sollte das Update gehen - bis auf die Anführungszeichen. r00ty hat Recht: einfach weglassen. So, wie's da steht, würdest du in Tabelle2 nach Zeilen suchen, deren katnr dem Text "t1.kategorie" gleicht - schwer zu finden.
-
- Posts: 6
- Joined: 2003-11-17 15:36
Hi!
Also das mit:
alter table Tabelle1 add (name varchar(255)); klappt gut, genauso kann ich manuell ein neues Feld hinzufügen, aber bei UPDATE kommt Fehler.
Ich versuche nochmal mein Prob ausführlicher darzustellen:
Struktur der Tabelle1:
CREATE TABLE `Tabelle1` (
`tid` int(10) NOT NULL auto_increment,
`eid` int(10) NOT NULL default '0',
`uname` varchar(255) NOT NULL default '',
`tel` varchar(15) default NULL,
`fax` varchar(15) default NULL,
`email` varchar(50) default NULL,
`web` varchar(255) default NULL,
`catnr` int(11) NOT NULL default '0',
PRIMARY KEY (`tid`)
) TYPE=MyISAM AUTO_INCREMENT=100 ;
- 100 Einträge/Zeilen
----------------------------------------------------
Struktur der Tabelle2:
CREATE TABLE `Tabelle2` (
`catnr` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
UNIQUE KEY `name` (`name`),
UNIQUE KEY `catnr` (`catnr`)
) TYPE=MyISAM AUTO_INCREMENT=50 ;
50 Einträge/Zeilen
------------------------------------------------------
Die Spalte "catnr" in der Tabelle1 ist gleich mit der "catnr" der Tabelle2
Anhand der "catnr" werden später in der SELECT FROM Anweisung die beiden Tabellen behandelt um der Daten der Tabelle1 die entsprechenden Kategorienamen aus der Tabelle2 zugeordnet - Feld "name"
Das Feld "name" in der Tabelle2 beinhaltet die Begriffe (Auto, Frisör, Lackiererei, ... etc ...)
Jetzt möchte ich die Namen aus der Tabelle2 anhand der "catnr" in die Tabelle1 einfügen und die Tabelle2 später löschen. In der Tabelle1 würde ich anschließend das "catnr" Feld löschen.
Wie geht das am besten?, sonst muss ich auf Mysql 4. aktualisieren.
und die Punkt-Methode anwenden.
:roll: ------------------------------------------------
Gruß
alter table Tabelle1 add (name varchar(255)); klappt gut, genauso kann ich manuell ein neues Feld hinzufügen, aber bei UPDATE kommt Fehler.
Ich versuche nochmal mein Prob ausführlicher darzustellen:
Struktur der Tabelle1:
CREATE TABLE `Tabelle1` (
`tid` int(10) NOT NULL auto_increment,
`eid` int(10) NOT NULL default '0',
`uname` varchar(255) NOT NULL default '',
`tel` varchar(15) default NULL,
`fax` varchar(15) default NULL,
`email` varchar(50) default NULL,
`web` varchar(255) default NULL,
`catnr` int(11) NOT NULL default '0',
PRIMARY KEY (`tid`)
) TYPE=MyISAM AUTO_INCREMENT=100 ;
- 100 Einträge/Zeilen
----------------------------------------------------
Struktur der Tabelle2:
CREATE TABLE `Tabelle2` (
`catnr` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
UNIQUE KEY `name` (`name`),
UNIQUE KEY `catnr` (`catnr`)
) TYPE=MyISAM AUTO_INCREMENT=50 ;
50 Einträge/Zeilen
------------------------------------------------------
Die Spalte "catnr" in der Tabelle1 ist gleich mit der "catnr" der Tabelle2
Anhand der "catnr" werden später in der SELECT FROM Anweisung die beiden Tabellen behandelt um der Daten der Tabelle1 die entsprechenden Kategorienamen aus der Tabelle2 zugeordnet - Feld "name"
Das Feld "name" in der Tabelle2 beinhaltet die Begriffe (Auto, Frisör, Lackiererei, ... etc ...)
Jetzt möchte ich die Namen aus der Tabelle2 anhand der "catnr" in die Tabelle1 einfügen und die Tabelle2 später löschen. In der Tabelle1 würde ich anschließend das "catnr" Feld löschen.
Wie geht das am besten?, sonst muss ich auf Mysql 4. aktualisieren.
und die Punkt-Methode anwenden.
:roll: ------------------------------------------------
Gruß
-
- Posts: 13
- Joined: 2003-10-21 13:03
- Location: Meerbusch
Was für'n Fehler eigentlich ?
Ehrlich gesagt bin ich etwas ratlos.
Wie lautet eigentlich die Fehlermeldung (und: bei welchem SQL-Statement genau bekommst Du sie) ? Oder gibt's keinen Fehler und kein Ergebnis ?
(Ich weiß, Fehlermeldungen sind nicht MySQL's Stärke ...)
Wie lautet eigentlich die Fehlermeldung (und: bei welchem SQL-Statement genau bekommst Du sie) ? Oder gibt's keinen Fehler und kein Ergebnis ?
(Ich weiß, Fehlermeldungen sind nicht MySQL's Stärke ...)
-
- Posts: 401
- Joined: 2002-12-19 02:06
- Location: Siegburg
Re: Problem mit 2 Tabellen
In meinem schlauen Buch steht sowas ähnliches wie das hier
Allerdings funktioniert das mit mysql nicht.
Eventuell kommst du mit einer temporären Tabelle und einem join über t1, t2 weiter; aber nicht vergessen: zuerst ein BACKUP machen
Code: Select all
update t1 set name = ( select t2.name from t2 where t2.catnr = t1.catnr )
Eventuell kommst du mit einer temporären Tabelle und einem join über t1, t2 weiter; aber nicht vergessen: zuerst ein BACKUP machen
Code: Select all
create temporary table t3 (
tid int,
...
catnr int,
name varchar(255) );
insert into t3 select t1.tid, ..., t1.catnr, t2.name from t1, t2 where t1.catnr = t2.catnr;
delete from t1;
insert into t1 select * from t3;
-
- Posts: 6
- Joined: 2003-11-17 15:36
Hi! Lösung
Ich habs auch damit hinbekommen:
CREATE TABLE Tabelle3 SELECT Tabelle1. * , Tabelle2. *
FROM Tabelle1
INNER JOIN Tabelle2 ON Tabelle2.nr = Tabelle1.nr
Gruß :P
CREATE TABLE Tabelle3 SELECT Tabelle1. * , Tabelle2. *
FROM Tabelle1
INNER JOIN Tabelle2 ON Tabelle2.nr = Tabelle1.nr
Gruß :P